IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

WSLで始めるUbuntu

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第38回 bashの組み込みコマンドついて知ろう(6) (宮崎悟) 2021年12月

前回は、文字列を出力するbashの組み込みコマンドについて説明しました。今回も、bashの組み込みコマンドについて説明します。

enable [-a] [-dnps] [-f filename] [name ...]

bashの組み込みコマンドを有効もしくは無効にします。 bash は通常ファイルシステム上のコマンドより先に組み込みコマンドを探します。組み込みコマンドを無効にすると、 bashの組み込みコマンドと同じ名前を持つ環境変数PATHで指定したディレクトリ上のコマンドを、 完全なパス名を指定しなくても実行できます。

  • -n オプションを指定すると、それぞれの name は無効となり、それ以外の場合に name は有効となります。 例えば bash組み込みのものでなく、 環境変数PATH 上にある test バイナリを使うには、 enable -n test を実行します。

  • -f オプションは新しい組み込みコマンド name を共有オブジェクト filename からロードするという意味です。 このオプションは動的ロードをサポートしているシステム(WSLおよび通常のLinux)で使用できます。

  • -d オプションは、以前に -f オプションでロードした組み込みコマンドを削除します。

  • -p オプションを指定した、または引き数 name が指定されなかった場合、 bashの組み込みコマンドのリストが表示されます。 他にオプション引数が指定されていない場合には、 有効になっているbash組み込みコマンド全てからなるリストが表示されます。

  • -n オプションを指定すると、無効にされている組み込みコマンドだけが出力されます。

  • -a オプションを指定すると、それぞれ有効かどうかの表示付きで全ての組み込みコマンドが出力されます。

  • -s オプションを指定すると、出力されるのは POSIX の特殊組み込みコマンドだけに制限されます。

nameがbash組み込みコマンドでない場合と、 共有オブジェクトからの新しい組み込みコマンドのロードに失敗した場合を除き、 enable の返り値は 0 となります。

# 通常、pwdはbashの組み込みコマンド
$  enable | grep pwd
enable pwd
# pwd --versionを使用できない
$ pwd --version
-bash: pwd: --: 無効なオプションです
pwd: 使用法: pwd [-LP]
# pwd を無効にする
$ enable -n pwd
$ pwd --version
# /usr/bin/pwd が実行される
$ pwd --version
pwd (GNU coreutils) 8.30
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
作者 Jim Meyering。
# 無効にされた組み込みコマンドを表示
$ enable -n
enable -n pwd
# 組み込みコマンドを有効にする
$ enable pwd
$ enable -n
$ $ pwd --version
-bash: pwd: --: 無効なオプションです
pwd: 使用法: pwd [-LP]
eval [arg ...]

arg で指定した文字列を、引数を含めた1 つのコマンドに結合し、実行します。 コマンドの終了ステータスが eval の値として返されます。 arg がない場合や空の引き数しかない場合には eval は 0 を返します。

# ssh-agent の実行例。出力をそのまま実行する必要がある
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-quo5s1GeUrfU/agent.3100; export SSH_AUTH_SOCK;
SSH_AGENT_PID=3101; export SSH_AGENT_PID;
echo Agent pid 3101;
$ kill 3101
# ssh-agent の出力結果をそのまま実行する
$ eval $(ssh-agent)
Agent pid 3105
# 環境変数がそのまま実行される
$ echo $SSH_AUTH_SOCK;echo $SSH_AGENT_PID
/tmp/ssh-zINPEkY8ceT1/agent.3104
3105
exec [-cl] [-a name] [command [arguments]]

command が指定されていると、実行したbashはこのcommand実行に置き換えられます。 新しいプロセスは生成されません。

  • arguments は command に対する引き数となります。
  • -l オプションを指定すると、bashは command に渡す 0 番目のオプションの先頭にダッシュを設定します。 これは login(1) が行う動作です。
  • -c オプションを指定すると、 command は空の環境で実行されます。
  • -a を指定すると、bashは実行するコマンドに 0 番目の引き数として name を渡します。

何らかの理由で command が実行できない場合には非対話的なbashは終了します。 ただしbashオプション execfail が設定されている場合は終了せず、偽が返されます。 ファイルが実行できない場合には、対話的bashは偽を返します。 command が指定されていない場合、任意のリダイレクトはカレントシェルで効果を持ち、 終了ステータスは 0 となります。 リダイレクトのエラーが起きた場合には、終了ステータスは 1 となります。

exit [n]

指定した終了コード n でbashを終了させます。 n を省略すると、 最後に実行したコマンドの終了コード(シェル変数$?の値)となります。 bashが終了する前には、 EXIT に対するトラップが実行されます。このコマンドは、シェルスクリプトで使用することが多いです。

終わりに

今回は、bashの組み込みコマンドについて説明しました。次回も、bashの組み込みコマンドについて説明を続けます。次回をお楽しみに。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes