sudo
を発行するのを忘れた場合 コマンドの前に?タイプミスがあったためにコマンド全体を繰り返さなければならなかったことがありますか?以前のコマンドを繰り返すためのショートカットがあればいいと思ったことはありますか?これがあなたのように聞こえるなら、私は共有する何かがあります。この記事では、bash bang(!
)の使用方法を紹介します。 )コマンド。コマンドを繰り返してエラーを修正するのが簡単になります。
Bashは、以前に発行したコマンドのリストへのアクセスを提供します。これは、コマンド履歴と呼ばれます。 HISTSIZE
の値 変数は、履歴リストに保存されるコマンドの数を設定します。デフォルトでは、この値は500です。これらの以前に発行されたコマンド(履歴リストと呼ばれます)は、履歴ファイルに保存されます。デフォルトの場所は~/.bash_history
です。 、この場所はシェル変数HISTFILE
に保存されます 。
内部的には、bang(!)コマンドは、bash履歴リストからのコマンドを入力ストリームに導入します。この機能により、コマンドの繰り返し、テキストの置換、引数の操作、以前のコマンドのタイプミスの修正を簡単に行うことができます。
これがbashbangでできることのいくつかの例です。
強打(!
)の後に、実行するコマンドに一致する最初の文字(または文字列)が続くと、そのコマンドの最新のインスタンスが繰り返されます。
$ ls
dir dir1 dir2 file file1 file2 hello.txt
$ !l
ls
dir dir1 dir2 file file1 file2 hello.txt
$ !ls
ls
dir dir1 dir2 file file1 file2 hello.txt
!?<string>
formatは上記と同じですが、<string>
コマンドの先頭にある必要はありません:
$ cat hello.txt
Hello world ..!
$ !?hello.txt
cat hello.txt
Hello world ..!
bash履歴からnコマンドを繰り返す(上からカウントダウンする)のは、問題の番号でバングを使用するのと同じくらい簡単です:
!10
bash履歴からnコマンドを繰り返す(下から数える)のは、マイナスと問題の数字を使った強打を使用するのと同じくらい簡単です:
!-10
私がいつも使っているbangコマンドが1つあるとしたら、それは!!
になります。 。バンバン(!!
)コマンドは、履歴リストの最後のコマンドを繰り返し、!-1
と同じように動作します。 :
$ cat hello.txt
Hello world ..!
$ !!
cat hello.txt
Hello world ..!
バンバン(!!
)は、前のコマンドを繰り返す必要がある場合、またはsudo
のプレフィックスを付ける必要がある場合に役立ちます。 、またはパイプ出力:
$ yum update
Loaded plugins: priorities, update-motd, upgrade-helper
You need to be root to perform this command.
$ sudo !!
sudo yum update
Loaded plugins: priorities, update-motd, upgrade-helper
$ ls
dir dir1 dir2 file file1 file2 hello.txt
$ !! | grep file
ls | grep file
file
file1
file2
$
多くの場合、長いコマンドを発行して、別のスイッチで再発行します。または、前のコマンドにタイプミスがあったため、コマンドを再発行する必要があります。文字列の置換により、長いコマンド全体を再入力せずにこれを行うことができます。
この結果を達成するには2つの方法があります。 1つは次を使用することです:
!!:s^<old>^<new>
この構造は、前のコマンドの代わりに文字列を使用します:
$ ls /etc/httpd/conf.d
autoindex.conf notrace.conf php.conf php-conf.7.2 README userdir.conf welcome.conf
$ !!:s^conf.d^conf
ls /etc/httpd/conf
httpd.conf magic
!<string>:s^<old>^<new>
でも同じことができます :
$ !l:s^conf^conf.d
ls /etc/httpd/conf.d
autoindex.conf notrace.conf php.conf php-conf.7.2 README userdir.conf welcome.conf
このオプションは、最新ではないコマンドの文字列置換を行う必要がある場合に役立ちます。
この結果を達成するもう1つの方法は、構造体^<old>^<new>
を使用することです。 。この形式は、!!:s^<old>^<new>
のように、最新のコマンドを文字列に置き換えます。 :
$ cd /etc/httpd/conf.d
/etc/httpd/conf.d
/etc/httpd/conf.d $ ^conf.d^conf
cd /etc/httpd/conf
/etc/httpd/conf $
多くの場合、前のコマンドと同じ引数を使用します。長い引数がある場合は、次のコマンドでそれを繰り返したいと思うでしょう。これを実行できるbashbangコマンドをいくつか見てみましょう。
まず、フォーマット!:n
0
を使用して、前のコマンドのn引数を繰り返します コマンド自体であること:
~/project $ ls -a -l
total 32
drwxrwxr-x 7 user user 4096 Sep 9 20:30 .
drwx------ 16 user user 4096 Sep 9 20:10 ..
drwxrwxr-x 2 user user 4096 Sep 9 16:02 dir
drwxrwxr-x 2 user user 4096 Sep 9 16:02 dir1
drwxrwxr-x 2 user user 4096 Sep 9 16:02 dir2
drwxrwxr-x 2 user user 4096 Sep 9 20:30 dir3
-rw-rw-r-- 1 user user 0 Sep 9 16:02 file
-rw-rw-r-- 1 user user 0 Sep 5 16:07 .file
-rw-rw-r-- 1 user user 0 Sep 9 16:01 file1
-rw-rw-r-- 1 user user 0 Sep 9 16:01 file2
-rw-rw-r-- 1 user user 16 Sep 9 16:03 hello.txt
drwxrwxr-x 2 user user 4096 Sep 5 16:08 .hidden_dir
-rw-rw-r-- 1 user user 0 Sep 5 16:08 .hidden_file
~/project $ ls !:1
ls -a
. .. dir dir1 dir2 dir3 file .file file1 file2 hello.txt .hidden_dir .hidden_file
次に、!!:$
前のコマンドの最後の引数を繰り返します。このコマンドを!$
に短縮できます および$_
:
project $ mkdir dir3
project $ cd !$
cd dir3
project/dir3 $
「以前に発行したコマンドでこの手法を使用したいが、最新のコマンドでは使用したくない場合はどうすればよいですか?」と質問するかもしれません。次のいずれかを使用して、bangコマンドでこれを行うことができます。
!<command you've issued previously >:$
$ mkdir -p hello/test1/test2
$ ls !mkdir:$
ls hello/test1/test2
または:
!<command you've issued previously >:n
$ ls !mk:2
ls hello/test1/test2
コマンドを印刷したいが、実行したくない場合があります。このタスクは!:p
で実行できます :
~/project $ cat hello.txt
Hello world ..!
~/project $ !:p
cat hello.txt
~/project $
実際、履歴リスト内の任意のコマンドを実行せずに印刷できます。次のいずれかを発行するだけです:
$ !<command>:p
$ !mkdir:p
mkdir -p hello/test1/test2
$ !<string>:p
$ !su:p
sudo yum check-update
$ !mk:p
mkdir -p hello/test1/test2
システム管理者は、おそらく毎日何百ものコマンドを発行します。一部のコマンドをリコールしたり、コマンドの一部をリコールしたりするのに苦労するかもしれません。必要なものを見つけるための別のオプションがあります。
(reverse-i-search)`<search string>’: <output> (reverse-i-search)`yu': sudo yum check-update
(reverse-i-search)`cd': cd /etc
CTRL + R reverse-i-search
をアクティブにします 、これは優れた検索領域を提供し、履歴をナビゲートするためのより簡単な方法を提供します。
これらは便利なbashbang(!
)すべてのシステム管理者が精通している必要があるコマンド。これらのコマンドは時間を大幅に節約し、コマンドエラーをすばやく修正する機能を提供します。コマンドman bash
を使用して、manページでbashの詳細を確認してください。 。
[Red Hat Enterprise Linuxを試してみませんか?今すぐ無料でダウンロードしてください。]