私は現在Linuxスクリプトを学んでいますが、私ができることの1つはコマンド出力を変数に割り当てることです。コマンドがservice httpd configtest
返されたので、Syntax is OK
こう書いています。
#!/bin/bash
var=`service httpd configtest`
echo "Output is $var"
私が読んだところによれば、出力は保存され、再びエコーされなければvar
なりません。ただし、スクリプトを実行したときの出力は次のとおりです。
Syntax OK
Output is
私は何が間違っていましたか?違いがある場合は、CentOS 6.5を使用しています。
ベストアンサー1
これを実行すると、service httpd configtest
実際に次のコマンドが実行されますapachectl configtest
。
....
apachectl=/usr/sbin/apachectl
....
graceful|help|configtest|fullstatus)
$apachectl $@
RETVAL=$?
;;
....
何かを作るstrace
:
$ strace -f -e trace=write apachectl configtest
Process 22999 attached (waiting for parent)
Process 22999 resumed (parent 22998 ready)
[pid 22999] write(1, "1024\n", 5) = 5
Process 22999 detached
--- SIGCHLD (Child exited) @ 0 (0) ---
Process 23000 attached (waiting for parent)
Process 23000 resumed (parent 22998 ready)
Process 22998 suspended
[pid 23000] write(2, "Syntax OK\n", 10Syntax OK
) = 10
Process 22998 resumed
Process 23000 detached
--- SIGCHLD (Child exited) @ 0 (0) ---
ご覧のとおり、出力は記録され、出力はSyntax OK
変数stderr
に保存されません。var
stderr
リダイレクトでこれを行うことができますstdout
。
var=$(service httpd configtest 2>&1)