私のシェルはどのような起動ファイルを使用していますか?

私のシェルはどのような起動ファイルを使用していますか?

Google Compute Engine に Ubuntu をインストールすると、複数の起動ファイルがあります。

現在使用しているシェルでどの起動ファイルを使用しているかを知らせるコマンドはありますか?

ベストアンサー1

シェルが通常起動時に読み取るファイルのリストはいくつか制限されます。しかし、彼らは順番に源泉他のものは、複雑な完成システムをロードするときなど、非常に大きな数字になる可能性があります。

1つの方法は、次を使用してシェルを実行することです。

strace -e open your-shell

truss(または// tusc...などのシステムの対応するコマンドdtruss

これにより、シェルで開かれたすべてのファイルが一覧表示されます。また、開いたファイルと開始されていないファイル、試してみたが開けなかったファイルも一覧表示されます。

xtrace別のアプローチは、シェルが各コマンドに対して実行するアクションをstderrに印刷するいくつかのシェルモードを使用することです。これを行うには、-xこのオプションを使用してシェルを呼び出すだけです。

デフォルトでは、一部のシェルはzsh実行中のコードを含むファイルのパスを印刷します(たとえば、関数内で実行されているコードのファイル名を印刷するようPS4に設定することもできます)。または+%x>、他の場合は、変数を変更して印刷することもできます。bashksh93$PS4

PS4='+$BASH_SOURCE> ' bash -x
PS4='+${sh.file}> ' ksh93 -x
PS4='+%x> ' zsh -x

を使用すると、bashファイルの一意のパスのみが保存されるように出力を後処理できます。たとえば、次のようになります。

PS4=' <:>$BASH_SOURCE<:>' BASH_XTRACEFD=3 3> >(
  awk -F'<:>' 'NF>2 && !seen[$2]++ {print $2}') bash -x

(スタートアップファイルパスに改行文字が含まれていないか、<:>含まれているスタートアップファイルで複数行コマンドが実行されないと仮定<:>

これらxtraceの基礎となる方法は、空であるか、コメントまたは関数定義のみを含む開始ファイルをリストしません(後でその関数が実行されない限り)、シェルが存在する場合に処理する開始ファイルもリストしません。

ただし、関数が定義されているファイルを検索できます。

eval "(shopt -s extdebug; declare() { typeset -F \"\$2\"; }
  $(typeset -F))" | cut -d ' ' -f 3- | sort -u

そしてbashまたは

type ${(k)functions} | sed -n 's/.*is a shell function from //p' | sort -u

そしてzsh

おすすめ記事