S-JIS[2008-11-29/2015-04-04] 変更履歴

set 〔オプション〕

UNIXの環境変数(シェル変数)や、シェルの環境を設定するUNIXコマンド


概要

設定されているシェル変数の一覧を表示したり、環境を設定したりする。


man set」ではsetのオプションは出てこない。
シェルのマニュアル(「man bash」とか)の中に組み込みコマンドとしてsetやsetのオプションが載っている。


対話形式での使用例

set

設定されているシェル変数の一覧を表示する。

$ set

set -o

シェル自体の環境(オプション)の状況を一覧表示する。(bash)

$ set -o
allexport       off
braceexpand     on
emacs           on
〜

set -C

noclobberをonにする。
すると、リダイレクト(「>」「>&」「<>」)でファイルを指定した際に ファイルが既に存在しているとエラーになる(上書きできない)。
(「>|」なら上書き可能)

set +C

noclobberをoffにする。(リダイレクトの出力先ファイルが既に存在していたら上書きする)


シェルスクリプトでの使用例

シェルスクリプト内でsetを使って、コマンドの実行に関する設定を行うことが出来る。[2015-04-04]


set -x

実行する際に、実行するコマンドを出力する。[2015-04-04]
(シェルスクリプトの先頭のシェバン(#!)で-xを指定すると実行するコマンドが表示されるようになるが、それと同様)

スクリプトの内容
t.sh
#!/bin/bash
echo start
echo end
#!/bin/bash -x
echo start
echo end
#!/bin/bash
set -x
echo start
echo end
実行方法 ./t.sh bash t.sh bash -x t.sh ./t.sh bash t.sh bash -x t.sh ./t.sh bash t.sh bash -x t.sh
実行結果 start
end
start
end
+ echo start
start
+ echo end
end
+ echo start
start
+ echo end
end
start
end
+ echo start
start
+ echo end
end
+ echo start
start
+ echo end
end
+ echo start
start
+ echo end
end
+ echo start
start
+ echo end
end

シェバン(#!)で-xを指定すると、スクリプトファイルを直接実行した場合(./script.sh)だけ有効になる。
bashコマンドの引数としてスクリプトファイルを指定して実行した場合、bashコマンドのオプションとして-xを付けると、常に有効になる。
シェルスクリプト内でset -xしておくと、常に有効になる。


set -e

実行したコマンドが失敗する(0以外を返す)と、そこでシェルスクリプトの実行を終了する。[2015-04-04]
途中のコマンドが失敗したら終了してよい場合、毎回戻り値の判定を行わなくて済むので、楽だ(笑)

スクリプトの内容 #!/bin/bash
rm /abc
rm /zzz
echo end
#!/bin/bash
set -e
rm /abc
rm /zzz
echo end
#!/bin/bash
set -e -x
rm /abc
rm /zzz
echo end
実行結果 rm: `/abc' を削除できません: No such file or directory
rm: `/zzz' を削除できません: No such file or directory
end
rm: `/abc' を削除できません: No such file or directory + rm /abc
rm: `/abc' を削除できません: No such file or directory
戻り値
(echo $?
0 1
rm /abcの戻り値になる)
1
rm /abcの戻り値になる)

スクリプト自体の戻り値は、失敗したコマンドの戻り値となる。


UNIXコマンドへ戻る
メールの送信先:ひしだま