【问题标题】:Executing alias commands in newly opened Tabs在新打开的选项卡中执行别名命令
【发布时间】:2017-04-25 17:37:11
【问题描述】:

我在 Linux Ubuntu 中有以下 bash 脚本,它会打开一个带有多个选项卡的新终端,并在每个选项卡中执行 ssh 命令以访问远程路由器:

#!/bin/bash

gnome-terminal --tab -e "ssh root@172.16.17.4" --tab -e "ssh root@172.16.17.5"

在 bashrc 文件中,我已经包含了以下别名命令的定义:

alias router4='ssh root@172.16.17.4'
alias router5='ssh root@172.16.17.5'

当我用这些别名命令替换第一个脚本中的完整 ssh 命令时,每个 Tab 都会给我以下错误:

为此终端创建子进程时出错

子进程“router6”执行失败(没有那个文件或目录)

如何解决这个问题?

注意:当我在手动打开的选项卡中执行前面的别名命令时,它们可以正常工作。

【问题讨论】:

    标签: linux bash terminal


    【解决方案1】:

    您可以尝试从别名切换到 .bashrc 中的函数。根据 bash 的文档,在大多数情况下,函数比别名更好。在您的情况下,由于您没有将 bash 作为登录环境运行,因此它可能会更好地工作。将此添加到您的 .bashrc 并注释掉别名:

    router4() {
        /usr/bin/ssh root@172.16.17.4
    }
    

    如果这本身不起作用,您可以在定义 router4 后尝试在 .bashrc 中添加 export -f router4

    【讨论】:

      【解决方案2】:

      需要通过bash执行:

      gnome-terminal --tab -e "bash -c router4"
      

      【讨论】:

      • 终端启动但报告bash: router4: command not found。我还添加了shopt -s expand_aliases,但没有任何改变。
      • 好吧,是的,您没有在问题中指定;要保持窗口打开,请检查以下解决方案:stackoverflow.com/a/3512861/5348860
      • 我解决了保持终端打开的问题,这是通过更改配置文件名称来完成的。现在我有另一个问题,请查看我之前的答案。
      • 此工作流程中的所有内容都是以同一用户身份完成的吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-09
      • 2017-05-19
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      • 1970-01-01
      相关资源
      最近更新 更多