今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

シェルの便利機能いろいろ

Unix系OSのターミナルでは、コマンドライン上でいろいろな便利機能がある。
@isloop さんのブログを読んで、意外と知られてないもんだなーと思ったので、知ってる範囲で書いておく。

【ちょー楽】ターミナルで前に実行したコマンドを再入力できるショートカットキー

  • history : 過去に入力したコマンドの履歴を表示する。
  • ↑: コマンド履歴をひとつづつ過去に遡る。
  • ↓:コマンド履歴をひとつづつ新しい方に進む。
  • !n:history で表示された n 番目のコマンドを実行する。
  • !!:直前に実行したコマンドを再実行する。
  • !word:hisotry の中から word で始まるコマンド行の最も新しいコマンドを実行する。
  • !word:p:':p'をつけるとコマンドを表示するだけで実行しない。
  • ^word1^word2:直前のコマンド内の文字列 word1 を word2 に置換して実行する。
$ find . -name '*html' -print
(結果を表示)
$ !!
find . -name '*html' -print
(結果を表示)
$ !!:p
find . -name '*html' -print
(結果は表示しない=実行しない)
$ ^html^css
find . -name '*css' -print
(結果を表示)

コマンドラインの中ではカーソル移動して編集できる。

  • C-a :行頭にカーソル移動
  • C-e :行末にカーソル移動
  • C-b :1文字左にカーソル移動
  • C-f :1文字右にカーソル移動
  • C-d :カーソル位置の文字を1文字削除
  • C-w :カーソル直前のフレーズを削除
  • TAB:ファイル名の補完

直前のコマンドの最後の引数を !$ で次のコマンドに渡したり。

$ ls -l /va/www/html
(結果を表示)
$ cd !$
cd /var/www/html
$ 

パイプを使って履歴を検索したり。

$ history | grep vi

findでファイル検索した結果をgrepに渡したり。

$ grep margin `find . -name '*css' -print`

vi などでファイル編集中に C-z で vi をサスペンドして別のコマンドを実行して、fgコマンドで vi に戻って編集を続けるとか。

pushd /etc/httpd/conf.d とかしてディレクトリ移動して、作業が終わったら popd して元のディレクトリに戻るとか。

あと何があったっけ?