2017-01-22 4 views
-1

私は頻繁に次のような状況で自分自身を見つける:(予想通り)!$Not a directoryあるので前のコマンドの最後の引数の `dirname`を取得するにはどうすればよいですか?

mv picture /very/long/path/favicon.ico 
cd !$ 

2番目のコマンドは失敗します。私は/very/long/pathに私を連れていくbashの歴史の置換魔法がありますか?

+0

まあ、 'cd/very/long/path && mv $ OLDPWD/picture .'では、長いパスを2度書き出す手間が省けます。しかし、この問題は私の習慣を変えるにはあまりにも些細かもしれません。 :P –

答えて

3

!$:hを使用することが必要とされたまさにないことを行うための簡単な方法があります。

2

代わりに$_を利用できます。これは最後に実行されたコマンドの最後の引数に展開されます。そして、最後/はどうしたら後の部分を取り除くために、単純なパラメータ展開:だから

${_%/*} 

cd "${_%/*}" 
+0

ありがとうございました。もう一度私は '男bash'を待って、これがどのように動作するかを見つけてください。 :) –

+1

@pii_ke:この関数を '〜/ .bashrc'に追加し、' x'を使う: 'x(){cd" $ {_%/ *} "; } ' – Cyrus

0

あなたは最後のコマンドを取得するには、このアプローチを使用することができ、質問はあなたがしたいものですそれと。

mv picture /very/long/path/favicon.ico 
cd !$:h 

出典:man bash、文字列trailing filename探しを Get bash history

0

はDIRNAMEコマンド

cd $(dirname !$); 
関連する問題