2013-06-07 4 views
9

bashでは、rubyと同様に、プログラム名は$ 0で与えられます。魚には何が入っていますか?魚のシェルスクリプトでプログラム名を取得する方法は?

set PROGRAM (ps --no-header -o args -p %self | egrep -o '\S+')[2] 

しかし、私はプログラム名が既にどこかで利用可能でなければならないと確信しています。また、各プログラムのスタブで変数にプログラム名を設定することもできますが、それには保守上の問題があります。

答えて

14

あなたのコマンドと同じ結果を得るには、あなたが探しているスクリプトファイル名です。

この情報は変数には格納されませんが、statusを照会すると表示されます。

basename (status -f)  # The name of the file 
status -f     # The full path of the file 

詳細情報: http://fishshell.com/docs/2.0/commands.html#status

+0

プログラム名が実行中のファイルと異なる場合、これは機能しません。たとえば、コマンドがconfig.fishまたはシンボリックリンクされたファイルで定義された関数である場合。 – Thayne

4

fishの場合は、プログラム名に$_を使用してください。

+1

感謝。私は$ _で何も得られません。 [link](http://fishshell.com/docs/2.0/index.html)には、$ _を簡単に紹介しています。 [link](https://github.com/fish-shell/fish-shell/issues/813)にもあります。ウィンドウのタイトルと関係がありますが、実際のプログラム名ではありません。 – user1494787

+1

対話的には、現在のコマンドの名前です。 'echo $ _'に対して' echo'を返します。ファンクションでは、入力したトップレベルの対話型コマンドです(例えば、 '関数f; g;終了;関数g;エコー$ _;終了'と 'f'を入力すると' f'が出力されます)。非対話型スクリプトでは、空であるようです。いずれにせよ、あなたが望むものではありません。 –

+1

これらの特別な変数名のリストはどこにありますか? (もう1つは '$ argv'でしょう)。彼らはかなり難しいです。 – mjs

関連する問題