CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
前回は、bashの組み込みコマンドについて説明しました。今回も、bashの組み込みコマンドについて説明します。
コマンドのオプションや引数の補完に関わるコマンドです。後日、詳しく説明します。
for, while, until, select ループの次の繰り返しで、ブロック以降の処理を無視し、ループの次の実行を継続します。シェルスクリプトの説明で、再度説明します。
変数を宣言したり、変数に属性を与えたりします。シェルスクリプトの説明で、再度説明します。
dirs コマンドは、現在記憶しているディレクトリスタックのリストが表示されます。デフォルトでは、全てのディレクトリ名が空白によって区切られた1行で表示されます。ディレクトリスタックへディレクトリを追加するには、pushd/popd コマンドを使用します。
pushdコマンドは、指定したディレクトリをディレクトリスタックの上位に追加したり、ディレクトリスタックの位置を交換します。通常、pushd はディレクトリスタックの最初のエントリをカレントディレクトリとし、必要があればディレクトリを移動します。
popdコマンドは、ディレクトリスタックからエントリを削除します。引数がない場合は、ディレクトリスタックの最初のエントリを削除とします。削除後にディレクトリスタックの最初のエントリに移動します。
pushd/popd コマンドを実行後、必ずdirsコマンドが実行され、終了コードは0になります。pushd/popdが終了コードとして偽を返すのは、以下のパターンです。
以下は、pushd/popd/dirs コマンドの使用例です。
# 最初のカレントディレクトリは/tmp/aaa です
$ pwd
/tmp/aaa
$ dirs
/tmp/aaa
# pushd で /tmp/bbbに移動します。カレントディレクトリがbbbになります。
$ pushd ../bbb
/tmp/bbb /tmp/aaa
$ pwd
/tmp/bbb
# dirs -vの例です。ディレクトリスタックであることが分かりやすいです。
$ dirs -v
0 /tmp/bbb
1 /tmp/aaa
# pushd 単体だと、ディレクトリスタックの0番目と1番目が交換されます。
$ pushd
/tmp/aaa /tmp/bbb
# /tmp/aaa がカレントディレクトリになります。
$ dirs -v
0 /tmp/aaa
1 /tmp/bbb
# 2つ以上pushdで追加可能です。
$ pushd ../ccc
/tmp/ccc /tmp/aaa /tmp/bbb
$ dirs -v
0 /tmp/ccc
1 /tmp/aaa
2 /tmp/bbb
# popd で最初のエントリ/tmp/cccが削除され、/tmp/aaa がカレントディレクトリになります。
$ popd
/tmp/aaa /tmp/bbb
$ dirs -v
0 /tmp/aaa
1 /tmp/bbb
# pushd -n で、../cccがディレクトリスタックに追加されます。
$ pushd -n ../ccc
/tmp/aaa ../ccc /tmp/bbb
# このとき、1番目のスタックに追加されます。ディレクトリが相対パスであることに注意してください。
$ dirs -v
0 /tmp/aaa
1 ../ccc
2 /tmp/bbb
# pushd で移動したときに、初めて/tmp/ccc と解釈されます。
$ pushd
/tmp/ccc /tmp/aaa /tmp/bbb
$ dirs -v
0 /tmp/ccc
1 /tmp/aaa
2 /tmp/bbb
# pushd -1 を実行すると、最後から数えて1番目のエントリ(/tmp/aaa)に移動します。
$ pushd -1
/tmp/aaa /tmp/bbb /tmp/ccc
$ dirs -v
0 /tmp/aaa
1 /tmp/bbb
2 /tmp/ccc
# pushd +2 を実行すると、2番目のエントリ(/tmp/ccc)に移動します。
$ pushd +2
/tmp/ccc /tmp/aaa /tmp/bbb
$ dirs -v
0 /tmp/ccc
1 /tmp/aaa
2 /tmp/bbb
# pushdで既存のディレクトリを指定すると、複数のエントリとなります。
$ pushd /tmp/bbb
/tmp/bbb /tmp/ccc /tmp/aaa /tmp/bbb
$ dirs -v
0 /tmp/bbb
1 /tmp/ccc
2 /tmp/aaa
3 /tmp/bbb
$ pushd ../ddd
/tmp/ddd /tmp/aaa /tmp/ccc /tmp/bbb /tmp/bbb
$ popd -1
$ dirs -v
0 /tmp/ddd
1 /tmp/bbb
2 /tmp/ccc
3 /tmp/aaa
4 /tmp/bbb
# popd -0 で、最後から数えて0番目のエントリ(/tmp/aaa)を削除します。
$ popd -0
/tmp/ddd /tmp/bbb /tmp/ccc /tmp/aaa
$ dirs -v
0 /tmp/ddd
1 /tmp/bbb
2 /tmp/ccc
3 /tmp/aaa
# popd +2で、最初から2番めのエントリ(/tmp/ccc)を削除します。
$ popd +2
/tmp/ddd /tmp/bbb /tmp/aaa
$ dirs -v
0 /tmp/ddd
1 /tmp/bbb
2 /tmp/aaa
# ~をホームディレクトリとして扱います。
$ pushd ~/tmp
~/tmp /tmp/ddd /tmp/bbb /tmp/aaa
$ dirs -v
# cd を使用すると、カレントディレクトリのみが変更されます。
$ cd /tmp
$ dirs -v
0 /tmp
1 ~/tmp
2 /tmp/ddd
3 /tmp/bbb
4 /tmp/aaa
# 一番最後のエントリ(/tmp/aaa)に移動します。
$ pushd -0
/tmp/aaa /tmp ~/tmp /tmp/ddd /tmp/bbb
$ dirs -v
0 /tmp/aaa
1 /tmp
2 ~/tmp
3 /tmp/ddd
4 /tmp/bbb
# dirs -c で、ディレクトリスタックがクリアされます。
$ dirs -c
$ pwd
/tmp/aaa
$ dirs -v
0 /tmp/aaa
今回は、bashの組み込みコマンドのディレクトリスタック関連について説明しました。pushd/popd/dirs コマンドを活用すると、複数ディレクトリを移動するときに非常に便利になります。次回も、bashの組み込みコマンドについて説明を続けます。次回をお楽しみに。
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes