新しい gnome ターミナル ウィンドウを開いてエイリアス コマンドを実行する bash スクリプトを作成しようとしています。エイリアスを使用する代わりに関数を使用するのが適切な方法であることがわかりました。両方の方法を試しましたが、コマンドが認識されないというエラーが発生し、うまく動作しません。
これが私が持っているものです。
#!/bin/bash
# Cluster related functions
function gateway () {
ssh user@something -t ssh gateway
}
gnome-terminal --window-with-profile=Bash -- bash -c "gateway; bash;"
発生したエラーは次のとおりです:
bash: gateway: command not found
答え1
最も簡単な解決策は、呼び出す前に関数をエクスポートすることですgnome-terminal
。
export -f gateway
ノート:
エイリアスをエクスポートすることはできません。
関数のエクスポートは移植可能な機能ではありません。 から まで動作し
bash
ますbash
。新しいもの
bash
が古いものの子孫である場合bash
(関数がエクスポートされている場合)、当然動作します。たとえば、 がgnome-terminal
古いものを継承しbash
、新しいものbash
が を継承するgnome-terminal
場合です。これは、古いものがbash
ではないターミナルで実行されている場合に発生しますgnome-terminal
。私のテストでは、
gnome-terminal
内部から実行される場合gnome-terminal
(つまり、環境にGNOME_TERMINAL_*
変数が含まれる場合)、新しいgnome-terminal
プロセスは既に実行中のプロセスにタスクを委任してgnome-terminal
終了します。環境の新しいプロセスへの自然な継承はbash
発生しませんが、それでも新しいgnome-terminal
プロセスはコマンドだけでなく環境も通信できるほどスマートです。このように、bash
古いプロセス内の新しいプロセスはgnome-terminal
古いプロセスの子孫のように動作しbash
、エクスポートされた関数が機能します。3.28.2 でテスト済みgnome-terminal
。