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

Source in .sh script does not work after opening new terminal from .sh script

我在获取别名方面遇到问题。这确实是具体案例。我使用 open_new.sh:

打开带有两个选项卡的新终端 window
    #!/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 用户,以正常方式使用别名获取该文件没有任何问题。

提前致谢。

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

source ~/.my_aliases

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

在我在这里提问之前,我一直在寻找答案三天。现在我已经找到了我想分享的答案,如果其他人将来会遇到这个问题的话。在文件 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