2013-02-12 4 views
6

私は移植可能なbashrc/bash_profileファイルを作ろうとしています。私はシンボリックリンクの.bashrc、.bash_profileなどの単一のスクリプトを持っています。次に、$0を見て、どのスクリプトが呼び出されたかに基づいて何を行うかを切り替えています。問題は、シェルがbashrcスクリプトを呼び出すのはもちろん、実際にはbashを実行するということです。つまり、私のために$0-bashです。 $1さらにスクリプト名には設定されていません。bashでスクリプト名を実行させるにはどうすればよいですか?

私の質問は、bashではどのように実行されているスクリプトの名前を取得できますか?それを実行するバイナリではありません。 bash?

実際には新しいプロセスではないので、-bash$1が設定されていないとします。何か案は?

答えて

2

変数BASH_ARGVが動作するはずです、スクリプトが、それはより詳細な情報を提供し、さまざまなシナリオが明確に説明するため、これが受け入れ答えなければなりませんbeing sourced

$BASH_ARGV 
+0

これは一般的ではありません。 $ ARGVを解析する際には、他のスクリプトから呼び出されたことを知る必要があります。たぶん私は間違っています。私が間違っていると、あなたの答えの説明を強化する必要があります。例を追加する – hek2mgl

24

試してみてください。

readlink -f ${BASH_SOURCE[0]}

か、単に:

${BASH_SOURCE[0]}

備考

$0が唯一のユーザーは "./script.sh"

$BASH_ARGVを実行したときにのみ、ユーザーが実行したときに、 "script.sh" 作品や "ソースscript.sh"

作品

${BASH_SOURCE[0]}はどちらの場合でも機能します。

readlink -fは、シンボリックリンクを使用する場合に便利です。

+0

で表示されます。 – piratemurray

関連する問題