Linux Shell

  
について話す同日、私の同僚は私のコンピュータで、envコマンドを使って操作手順を教えてくれました。まあ、私は文盲だと認めていますが、このコマンドが何をしているのかわかりません! ! !それは私の無知のために学び探求したいという願望を喚起したからです。仕事が終わって数時間後、ついに私はこの「、」、もの、文書化されたもの、そしてみんなと共有されたものを見つけました。
Shellの最も簡単な理解
これはあなたの目の中のシェルですLinuxでターミナルを開くと、黒い画面または白い画面のウィンドウがあります。シェル、この理解は正しいかもしれないし、正しくないかもしれません。

Terminalを開くと、実際にはデフォルトのシェルインタプリタが実行されていますが、通常は/bin /bashです。説明すると、シェルはターミナル上で実行されるプログラムです。
シェルを理解するために、現在のシェルでシェルスクリプトを実行することがよくありますが、シェルスクリプトを実行すると、その背後にあるものがわかりますか。これは次のトピックである親シェルと子シェルに進みます。



親シェルと子シェル
親シェルと子シェルの関係がわからない場合は、この記事ではシェル内の変数について説明しますが、明確ではありません。
Terminalを起動すると、とりあえずShell process Aと呼ばれるシェルプロセスを実行します;このTerminalでシェルスクリプトを実行すると、process Aは新しいプロセスをforkして別のシェルインタプリタを起動します。 (これはスクリプトの最初の行で指定されています。たとえば、#!/bin /bash)、forkからの新しいプロセスは、当面はプロセスBと呼ばれます。この時点で、プロセスAとプロセスBは親プロセスと子プロセスの間の関係であり、プロセスBは子シェル、そしてプロセスAは親シェルです。子シェル内のスクリプトが実行を終了すると、子シェルは終了して親プロセスに戻ります。これは親シェルと子シェルです。
親シェルと子シェルをクリアする必要があると思いますこの関係を理解し​​た上で、引き続き要約します。
シェルの初期化はいくつかの設定ファイルを読む
まず第一に、あなたはLinuxシステムにログインし、ターミナルを開き、シェルを使うとき、システムは大きな "&"設定を読むことを認識しなければならないファイル、これらの設定ファイルはシェルの変数を決定します。そのため、シェル内の変数を要約するときには、どの構成ファイルが読み取られるのか、それらを読み取る順序はどのようになるのかを調べる必要があります。
  • /etc /profile:このファイルは、システムの各ユーザーの環境情報を設定し、ユーザーが初めてシステムにログインしたときに実行されます。そして/etc/profile.dディレクトリの設定ファイルからシェルの設定を読んでください;
  • 〜/.bash_profileまたは〜/.bash_loginまたは〜/.profile:システムはこれら3つのファイルを順番に探します。現在のユーザーの設定用ですが、これら3つのファイルは通常同時には存在しません。同時に存在する場合でも、システムがこの順序でファイルを見つけた後は、残りのファイルは読み込まれません。
  • 〜/.bashrc:このファイルには、現在ログインしているユーザーに属するbashシェルのbash情報が含まれています。このファイルは、毎回ログインして新しいシェルを開くときに読み込まれます。
  • /etc /bashrc:bashシェルを実行している各ユーザーに対してこのファイルを実行し、bashシェルを開くとファイルが読み取られます。

    これらのスクリプト設定ファイルは、システム変数と環境変数を決定します。興味のある方は、これらのスクリプトのソースコードをチェックしてください。そうすれば、それらがどのように呼び出されるのかを正確に知ることができます。もちろん、JDKの設定など、よく使用する変数をいくつか定義する必要がある場合は、それらを編集することをお勧めします。
    Shellの変数
    前のシェルで遊んで、シングルシェルプロセスの変数をクリアしてから、要約するために子シェルを追加します。
  • 内部変数;システム定義、変更不可;
  • 環境変数、システム定義、変更可能、エクスポートを使用してユーザー変数を次の変数に変換できます。環境変数;
  • ユーザー変数;ユーザー定義、定義することはできますが、何もしません。

    たとえば、以下は内部変数です。

    変数名
    説明
    $#コマンドラインパラメータ番号$ 0現在のプログラム名$?前コマンドまたは関数の戻りコード$$現在のプログラムのPID
    現在使用している環境変数を表示するには、一般的にenvコマンドを使用します。

    変数名
    説明
    PATHシェルがディレクトリまたはプログラムで探すディレクトリを指定します。SHELL現在のユーザーシェルの種類ホーム現在のユーザーのホームディレクトリPS1基本プロンプト
    >ユーザ変数(ローカル変数)はもっとカジュアルなので、自分で定義することができます。例えば:
    > str = 'Hello World'> echo $ str現在のシェルで定義されているユーザを表示するにはsetコマンドを使います。変数、もちろんsetコマンドは環境変数も出力します。
    上で言ったことがわかりますか。続けます。
    一緒に遊ぶために子シェルを持ってきましょう
    シェルでシェルスクリプトを実行すると、今度はforkが新しいシェルプロセスを作成し、次に親シェルと子シェルの2つのプロセスがあります。親子関係では、親プロセス内のシェル変数は子プロセスに継承されますか? ? ?同時に、子プロセスのシェル変数は親プロセスに返されますか。 ? ?これらはすべて私たちが注意を払う必要があるものです。例を見てみましょう。
    親シェルが変数を定義します。
    > str = 'Hello World'それから、親シェルで以下のスクリプトを実行します。
    #!/bin /bash#親シェルでの出力定義Strecho $ str#出力環境変数echo $ HOMEecho $ PATH実行後、$ str出力は空になりますが、$ HOMEと$ PATHは完全に出力されることがわかります。これはまた、シェルで定義したユーザー変数は現在のシェルでしか使用できず、子シェルであっても他のユーザー変数にはアクセスできないことを示しています;親プロセスの環境変数は子プロセスで使用できます。アクセスしかし、時には、このような要求があります。

    子プロセスの中で親プロセスのユーザ変数(ローカル変数)にアクセスするには、どうすればいいですか? ? ?
    そのような要求に遭遇したとき、私はexportコマンドについて話さなければなりませんでした。
    exportコマンドについての説明
    exportコマンドは、子シェルプロセスでアクセスできるように、ユーザー変数を環境変数に設定します。これは中国の輸出の意味とまったく同じです。前の例では、親シェルでコマンドを入力できます。
    > export strスクリプトを再度実行すると、ユーザー変数strの値を出力できますが、これがエクスポートの役割です。ただし、親シェルにエクスポート文字列を入力した後、親シェルを閉じると、環境変数は無効になりますので、シェルを開く場合はすぐにエクスポートを設定できます。その起動設定ファイルは、親シェルが閉じているためエクスポートが無効になることはありません。
    親と子のもう1つの関係
    子プロセスで親プロセスの変数にアクセスできるようになりました子シェルで親シェルの変数を変更すると、親シェルの変数に影響があるかどうか考えたことはありますか?値は何ですか?テストをしたいのですが。
    #!/bin /bash#親シェルによって渡された変数strの値を変更します$ str = 'http://www.jellythink.com'echo $ strスクリプトを実行して、親シェルでstrの値を見つけます。変更はありません。実際、これはLinuxのプロセスに関するもう1つのナレッジポイントに関連しています。親プロセスが子プロセスを分岐すると、子プロセスは親プロセスの関連変数をコピーしますが、このとき、子プロセスは親プロセスと同じ値になりますが、同じ名前は同じ値ですが、親プロセスのコピーにすぎません。コピーへの変更は、親プロセスとは無関係です。 Linuxプロセスについては、この記事を参照してください。
    そして、子シェルで変数を定義した場合、それは親シェルでアクセス可能ですか?あなたは親シェルの子シェルで定義された変数にアクセスすることはできません。親シェルの子シェルで定義されている変数にアクセスする場合は、一時ファイルを使用してローカル変数を一時ファイルに書き込むことができ、親シェルはそのファイルを読み取って子シェルで定義されている変数にアクセスします。
    概要
    この記事は多種多様なものが混在していますが、各部分は密接に関連していて連動していますので、Linuxシェル全体を理解することは非常に役に立ち、Linuxシェルを学ぶことも役に立ちます。この記事は少し長く、最初から最後まで読むには少し忍耐が必要です。学ぶためには、少し忍耐が必要です。これはここで要約され、そして次のものはさようならです。
    Jelly Think - オリジナルの技術記事共有サイト。 2015年10月21日にフフホトで。


    本文に含まれるコマンドといくつかの関連コマンドの要約です。

    コマンド
    説明
    setローカルに定義されているシェル変数を表示します。unset環境変数を消去します。unset str export新しい環境変数を設定します。envユーザーの現在の環境変数をすべて表示します。

  • Copyright © Windowsの知識 All Rights Reserved