2017-05-10 104 views
1

我想使用一個命令在我的終端的三個新終端上打開三個不同的文件夾。它們都應該彼此獨立運行,這意味着一個命令不依賴於前一個命令。調用多個Bash別名

這裏是我的.bash_aliases,這是從.bashrc中

alias cmd1=gnome-terminal && cd ~/Desktop/ 

alias cmd2=gnome-terminal && cd ~/Documents/ 

alias cmd3=gnome-terminal && cd ~/Music/ 

alias runcmds='cmd1 & cmd2 & cmd3' 

稱爲但是,這開闢了三個終端的音樂目錄,不正確地執行命令。我怎樣才能讓runcmds將所有3個命令分開運行?

此外,何時需要使用引號,何時不需要?

+0

...嗯。 'gnome-terminal && cd〜/ Desktop'不會運行新終端裏面的'cd' *,這正是我想象的你想要的。相反,它運行一個新的終端,並在獨立的,啓動終端的外部進程中執行'cd' - 一個完全不同的shell。 –

+1

至於你什麼時候做,不需要引號 - '別名cmd1 = gnome-terminal && cd〜/ Desktop'首先讓'cmd1'成爲'gnome-terminal'的別名,然後把目錄改成'〜〜/Desktop「,其中定義了該別名。相比之下,當別名被調用時,別名cmd1 ='gnome-terminal && cd〜/ Desktop'會將'cd'轉換爲'〜/ Desktop',而不是定義它。 –

+1

理解[Bash中的引號是如何工作的](http://mywiki.wooledge.org/Quotes)對於您作爲shell程序員的成功至關重要。如果您不確定何時使用它們,則可以在線獲取大量資源。 – dimo414

回答

5

你的操作順序是倒着:您需要cd,然後再開始的終端,如果你想這些終端中的新殼由cd受到影響。此外,您需要引用,以確保這兩個命令(cd和調用gnome-terminal)都被視爲別名的一部分。

alias cmd1='cd ~/Desktop/ && gnome-terminal' 
alias cmd2='cd ~/Documents/ && gnome-terminal' 
alias cmd3='cd ~/Music/ && gnome-terminal' 
alias runcmds='cmd1 & cmd2 & cmd3' 

順便說一句,我建議 - 強 - 不使用別名所有,並定義功能來代替:

cmd1() { cd ~/Desktop && gnome-terminal; } 
cmd2() { cd ~/Documents && gnome-terminal; } 
cmd3() { cd ~/Music && gnome-terminal; } 
runcmds() { cmd1 & cmd2 & cmd3 & } 

沒有任何引述參與(最終&,而不是最後的;通過確保cmd3與其他人一樣在子shell中運行)來防止父shell的位置被更改爲~/Music。當然,你可以只實現一個功能:

runcmds() { 
    local dir 
    for dir in ~/Desktop ~/Documents ~/Music; do 
    (cd "$dir" && exec gnome-terminal) & 
    done 
} 
+0

謝謝Charles Duffy !!!功能就像一個魅力:) – user3226932

3

其實gnome-terminal利於--working-directory選項。

man gnome-terminal

- 工作目錄= DIRNAME
         設置終端的工作目錄,以目錄名。

如下您可以使用別名:

alias cmd1='gnome-terminal --working-directory="$HOME/Desktop"' 
alias cmd2='gnome-terminal --working-directory="$HOME/Documents"' 
alias cmd3='gnome-terminal --working-directory="$HOME/Music"' 
alias runcmds='cmd1 & cmd2 & cmd3'