我正在嘗試編寫一個 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-terminal
3.28.2 進行測試。