シェルによって使用されている起動ファイルはどれですか?

シェルによって使用されている起動ファイルはどれですか?

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

関連情報