我正在尝试编写一个 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 进行测试。