What is bash option `-x`
※ 2014/12/17追記
man bash
を見ると
...
-x file
True if file exists and is executable.
...
となっているが実際に$ bash -x script.sh
とすると実行内容がエコーされる
なんでだろうと思ったら「CONDITIONAL EXPRESSIONS(条件式)」のコーナーに書いてあった
実行内容がエコーされる-xオプションは別にありそう
CONDITIONAL EXPRESSIONS
Conditional expressions are used by the [[ compound command and the test and [
builtin commands to test file attributes and perform string and arithmetic compar-
isons. Expressions are formed from the following unary or binary primaries. If
any file argument to one of the primaries is of the form /dev/fd/n, then file
descriptor n is checked. If the file argument to one of the primaries is one of
/dev/stdin, /dev/stdout, or /dev/stderr, file descriptor 0, 1, or 2, respectively,
is checked.
...
-x file
True if file exists and is executable.
...
実行内容を出してくれる方の-x
は実は組み込みコマンドのsetコマンドにある、-o
オプションで指定できるxtrace
のことだった!
SHELL BUILTIN COMMANDS
...
set [--abefhkmnptuvxBCHP] [-o option] [arg ...]
...
-o option-name
...
xtrace Same as -x.
...
-x After expanding each simple command, for command, case command,
select command, or arithmetic for command, display the expanded
value of PS4, followed by the command and its expanded arguments or
associated word list.
はぁ〜なるほどそういうことだったんですね
つまりタイトルのWhat is bash option `-x`
は厳密には正しくないんですね
シェルにオプションを設定するためのsetコマンドのオプションだったのですから…(ややこしい)
typeコマンドで指定したコマンドが組み込みコマンドなのか、エイリアスなのか等わかるようです
$ type set
set is a shell builtin
$ type git
git is /usr/local/bin/git
私はlsをエイリアスしているので以下のように表示される
$ type ls
ls is an alias for ls -FG
typeコマンド自身は…組み込みコマンド!
$ type type
type is a shell builtin
2014/12/17
表題のbash -x
の-xはtestコマンドの-xとのツッコミをいただきました!
https://twitter.com/masutaka/status/544887500771446784
$ type [
[ is a shell builtin
おおお…
if [ hoge.txt ]; then
echo "hello"
fi
if のあとに書くのはコマンド列(list)
そこに書いたとき式ぽく見えるように test と同等の [ が用意されている。(なお test を [ で起動すると、最後の引数として ] が必要になる)
構文上の閉じ括弧に見えるけど実はただの引数
というお話も頂きました 圧倒的感謝