bashスクリプトを介してgnomeターミナルを開き、エイリアスコマンドを呼び出して実行する

bashスクリプトを介してgnomeターミナルを開き、エイリアスコマンドを呼び出して実行する

新しい 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

関連情報