透過 bash 腳本開啟 gnome 終端並呼叫並執行別名命令

透過 bash 腳本開啟 gnome 終端並呼叫並執行別名命令

我正在嘗試編寫一個 bash 腳本來打開一個新的 gnome 終端視窗並運行一個別名命令。我發現使用函數代替使用別名是正確的方法。我已經嘗試了這兩種方法,但我無法讓它工作,因為我收到命令無法識別的錯誤。

這就是我所擁有的。

#!/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,導出的函數可以工作。使用gnome-terminal3.28.2 進行測試。

相關內容