web-dev-qa-db-ja.com

エイリアスのbash関数の遅延計算結果

Ubuntuのシンプルなコマンドで現在の場所に新しいターミナルウィンドウを開きたい

gnome-terminal --working-directory=`pwd` & disown

仕事はいいですね。しかし、bashrcにエイリアスを置くと

alias clone="gnome-terminal --working-directory=`pwd` & disown "

pwd開始時に計算されます。だから私は次のようなものを得る。

$ type clone
 clone is aliased to `gnome-terminal --working-directory=/home/user & disown '

エイリアスを呼び出すときにのみpwdを計算させることは可能ですか?または、エイリアス以外のbash関数を記述する必要がありますか?

5
Stepan Loginov

alias宣言コマンドを単一引用符で囲んで、宣言中にコマンド置換(pwd)が実行されないようにします(エイリアスが呼び出されたときにのみ展開されます)。

_alias clone='gnome-terminal --working-directory=`pwd` & disown'
_

また、古い問題のある_``_の代わりに、コマンド置換構文$()の使用を開始します。

_alias clone='gnome-terminal --working-directory="$(pwd)" & disown'
_

また、_gnome-terminal_は次のように設計されていることに注意してください。

_gnome-terminal
_

元のPIDと同じPIDで新しいウィンドウが開きます。これは、設計上同じプロセスであり、一方を終了しても他方は終了しないためです。したがって、disownとバックグラウンド(_&_)は必要ありません。

_alias clone='gnome-terminal --working-directory="$(pwd)"'
_

するだろう。

さらに、@ Digital Traumaが指摘したように、_gnome-terminal_は常に現在の作業ディレクトリから開始されるため、pwdとして設定するので_--working-directory_は必要ありません。だからあなたはちょうどすることができます:

_alias clone='gnome-terminal' 
_
10
heemayl