2017-03-06 79 views
1

我在使用别名时遇到了问题。这确实是特定的情况。我打开新的终端窗口使用open_new.sh两个标签:从.sh脚本中打开新终端之后,.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用户,我没有任何问题以正常方式使用别名来获取该文件。

在此先感谢。

+0

为什么在tab1.sh中需要'exec bash'?这似乎是问题。 – codeforester

+0

如果我不添加'exec bash',当tab1.sh完成执行时,我将无法输入任何内容。 – pykaczka

+1

'exec'用新进程替换当前的shell。新过程也是一个壳的事实并不意味着别名被转移到它。 – chepner

回答

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 
0

我建议添加以下到您的~/.bashrc

source ~/.my_aliases

这样,所有新标签将继承你的别名。

+0

我不能编辑这个文件,因为我不是root用户。 – pykaczka

+1

您可能已经想出了,'exec bash'产生了一个新的bash过程,它不会继承以前加载的别名 –

+1

也是''.bashrc'是用户配置文件,因此您应该在正常情况下具有编辑权限。毕竟它在你的家里!无论如何,你也可以使用'〜/ .bash_aliases' - 它会有相同的效果。 –