コマンドライン、ネイティブスクリプト、およびアプリケーションでのbash補完の使用。 パート1

パート2

システム管理者は怠け者です。 通常、彼は最小限の労力で最大限のことを試みますが、これには多くのルーチン手順の自動化が必要になることがよくあります。 たとえば、ssh接続を作成するときの完全修飾ホスト名のセット、またはいくつかのコマンドの長い引数:)

今日は、bash補完などの機能的なシェルの使用についてお話します。

そのため、ほとんどすべてのシェルはデフォルトでファイルとディレクトリにパスを追加できます。

root@mould:~# mkdir very_long_dir_name
root@mould:~# cd ve[Tab]
root@mould:~# cd very_long_dir_name/


(私の場合)Tabを押した後、bashはディレクトリの名前を追加します(最初に入力した文字で一意に識別できる場合)、またはオプションを表示します:

root@mould:~# ls .s[Tab]
.ssh/ .subversion/


しかし同時に、一部のシェルはパスだけでなく、多くのチームの議論を補完することができます。 例:

root@mould:~# apt-get up[Tab]
update upgrade


またはさらに複雑な構造:

root@mould:~# apt-get install bash-[Tab]
bash-builtins bash-completion bash-doc bash-minimal bash-static


debainベースのディストリビューションのこの機能については(残りについては何も言えません)、bash-completionパッケージのコンテンツが責任を負います。
補完機能を有効にするには、次を実行します。

root@mould:~# . /etc/bash_completion

または、そのような呼び出しを.bashrcファイルに追加して、ログインします。

if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi


ほとんどの場合、すでにそれを書いていますが、コメントアウトしています。
最も頻繁に必要な賛辞の1つを使用して開始してみましょう-ssh経由でアクセスするときにホスト名を追加します。
最初に〜/ .ssh / known_hostsでホスト名のハッシュを無効にする必要があります。 「ボックス化」設定では、このファイルの行は次のようになります。

|1|yVV33HmBny6RPYWkUB5aW+TksqQ=|f11ZL/FI9/Krfw2bqN0tBJeeq4w= ssh-rsa AAAAB3Nz__--__2bYw==

それは私たちに合わない。
sshクライアントの構成ファイル(/ etc / ssh / ssh_configまたは〜/ .ssh / config)にHashKnownHosts No値を設定し、.ssh / known_hostsをクリアすると(そうでない場合、正しい行は新しいホストに対してのみ追加されます)、読み取り可能になります最初の試行がホストにログオンした後、known_hostsのレコードオプション:

mould,11.22.33.44 ssh-rsa AAAAB3NzaC1y__--__c2EAANq6/Ww==

これにより、ssh接続を確立するときに準拠した名前を使用できるようになります。

veshij@dhcp250-203:~ $ ssh mould[Tab]
mould mould01e


あなたの「提出」に5-10台以上の車がある場合、それは非常に便利です。
ところで、アドオンはsshだけでなく、ping、traceroute、telnetなどの他の多くのプログラムでも機能します。 そして、ホスト名だけでなく、IPアドレスによっても。

このトピックが興味深い場合は、次のパートで、独自のスクリプトにコマンドと引数の追加を構成する方法を説明できます。 たとえば、次のように:

root@mould:~# my_test_script --[Tab]
--help --kill-all-humans --conquer-the-world


Source: https://habr.com/ru/post/J71525/


All Articles