从.sh脚本打开新终端后,.sh脚本中的源不起作用

时间:2017-03-06 08:38:32

标签: linux bash terminal alias

我在采购别名时遇到问题。这是非常具体的案例。我使用open_new.sh打开带有两个标签的新终端窗口:

    #!/bin/bash
    gnome-terminal --tab --title="Tab1" -e "./tab1.sh" --tab --title="Tab2" -e "./tab2.sh"

在文件tab1.sh中我有:

    #!/bin/bash
    ls
    . ~/.my_aliases
    echo "done"
    exec bash

文件tab2.sh看起来非常相似。第2行和第4行工作正常,但看起来第3行不起作用。当我尝试使用'lll'别名时,它会说'bash:lll:command not found'。然后当我直接在第3行输入命令时,别名开始工作。

我尝试了很多不同的解决方案,但我仍然无法处理它。例如,我在采购之前尝试了类似的东西:

    shopt -s expand_aliases

我试过这个:

    source ~/.my_aliases

我也尝试过:

    #!/bin/bash -i

有人能帮助我吗? 也许我应该提两件事:我不是root用户,我没有任何问题用正常方式使用别名来获取该文件。

提前致谢。

2 个答案:

答案 0 :(得分:1)

在我提问之前,我已经找了三天的答案。现在我已经找到了我想要分享的答案,如果其他人将来会解决这个问题。在文件open_new.sh中:

#!/bin/bash
gnome-terminal --tab --title="Tab1" -e "bash --rcfile ./tab1.sh" --tab --title="Tab2" -e "bash --rcfile ./tab2.sh"

在文件tab1.sh中:

. ~/.bashrc
. ~/.my_aliases
ls
echo "done"

说明:

--rcfile File #execute commands from File instead of the standard personal initialization file ~/.bashrc

在文件中,您可以放置​​许多其他命令。所有bash命令都适合我。我找到了解决方案:

man bash

答案 1 :(得分:0)

我建议将以下内容附加到~/.bashrc

source ~/.my_aliases

这样,所有新标签都会继承您的别名。