2017-03-06 82 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' - 它會有相同的效果。 –