通过 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 进行测试。

相关内容