2017-05-10 16 views
1

1つのコマンドを使用して、私の端末から3つの新しい端末に3つの異なるフォルダを開きたいとします。それらのすべてが互いに独立して実行され、1つのコマンドがそのコマンドに依存しないことを意味します。ここで 複数のBashエイリアスを呼び出す

は.bashrcに

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

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

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

alias runcmds='cmd1 & cmd2 & cmd3' 

から呼び出された私の.bash_aliases、あるしかし、これは音楽のディレクトリに三つの端子を開き、正しくコマンドを実行しません。どうすればruncmdsが3つのコマンドをそれぞれ別々に実行できるようにすることができますか?

また、いつ引用符を使用する必要がありますか?また、いつ必要なのですか?

+0

を...ええと。 'gnome-terminal && cd〜/ Desktop'は新しい端末の' cd' *を実行しません。これはあなたが望むものです。代わりに、新しい端末を実行し、端末を起動した*別個の外部プロセスの中で 'cd 'を実行します。これはまったく別のシェルです。 –

+1

引用符を必要としないときは、 'alias cmd1 = gnome-terminal && cd〜/ Desktop'はまず' cmd1'を 'gnome-terminal'のエイリアスにしてから'〜/Desktop'という別名が定義されています。これに対して、別名cmd1 = 'gnome-terminal && cd〜/ Desktop''はエイリアスが定義されているときとは異なり、エイリアスが呼び出されたとき '〜/ Desktop'に' cd'します。 –

+1

[Bashで引用符がどのように動作するか](http://mywiki.wooledge.org/Quotes)は、シェルプログラマとしての成功にとって非常に重要になります。いつそれらを使用するかわからない場合、オンラインで利用可能な多くのリソースがあります。 – 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がサブシェルで実行されるようにして、~/Musicに変更されないようにします。もちろん、あなただけの機能を実現することができます。

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

チャールズ・ダフィーありがとう!関数はチャームのように機能します:) – user3226932

3

実はgnome-terminal--working-directoryオプションを容易にします。 man gnome-terminalから

:DIRNAMEに端末の作業ディレクトリを設定し

--workingディレクトリ= 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' 
関連する問題