2016-05-04 10 views
1

この別名は私に迷惑を与えています。私はターミナルを開いて、最初の調達なしdmを実行した場合でも、私が手:

-bash: syntax error near unexpected token `&&' 

私が調達した後、端末を再起動した場合、それが再び動作しません。ここで何が問題なの? (そうであっても該当する見込みのない私はUbuntuの12.04でんだけど、。。)

export dl=~/"Desktop/Diffs/today.diff" 

+0

なぜ、関数ではなくエイリアスを使用していますか? –

+0

'dm(){git diff master>" $ dl "&& subl" $ dl "" $ @ "; } 'は、このエイリアスに相当する関数です。これは一般的に望ましいものです。関数は、引数の扱いとフロー制御に関してかなり柔軟性があります。 –

+0

(たとえば、関数に入れたい場合は '$ dl'をオーバーライドするのに' $ 1'を使うことができますが、エイリアスの引数に直接アクセスすることはできません)。 –

答えて

4

あなたの別名が定義されたときにあなたの変数dlが適切に空である:$dlはbash_profileの終わり近くに定義され、これです。そして、それはに展開されます:

alias dm='git diff master > "$dl" && subl "$dl"' 

今すぐdl変数が展開されているdmがオンに型付けされている場合:変数の展開は、別名を使用した場合に起こるようになる代わりに、二重引用符の単一引用符を使用して

alias dm="git diff master > && subl " 

コマンドライン:

% dl=hello 
% dm -> git diff master > hello && subl hello 
% dl=world 
% dm -> git diff master > world && subl world 

また、単語の分割とグロブを避けるために、$dlの前後に引用符を追加しました。

あなたが代わりにエイリアスの機能を使用して検討するかもしれない、IMOの別名は、LSにはgrepなどを色を追加するようなもののためのものです...

alias ls='ls --color=auto' 

機能は、より複雑なコマンドを実行しているためですが:

dm() { 
    git diff master > "$dl" 
    subl "$dl" 
} 

BTW。多くのコマンドが入力標準入力から来ているので、次のことがうまくいくかもしれないことを告げる-フラグをサポートしています。

dm() { 
    git diff master | subl - 
} 
+0

良い答えですが、エイリアスを関数に置き換えるとさらに優れていると主張します。 –

+0

@CharlesDuffyあなたはちょうど更新の前に私を得ました:-) – andlrc

+0

'git diff master | '-'が明示的に扱われないならば、' subl/dev/stdin'や 'subl(git diff master)'も考慮に値するかもしれません(そして、 'subl'が入力のためにシーク可能なファイル)。 –

0

あなたは.bash_profileスクリプトの終わりに向かってdlを定義していると述べました。これは、dmエイリアスの後にdlがエクスポートされることを意味しますか?

dlが最初にエクスポートされてから、dmエイリアスが設定されている場合は、dlという変数を継承します。

ソースの後に動作する理由は、最初の端末ログインが変数dlのソースになるため、マニュアルsourceは直前に定義された変数dlでエイリアスをリセットします。

関連する問題

 関連する問題