スクリプトからコマンド出力を読み取る方法

スクリプトからコマンド出力を読み取る方法

私は現在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)

おすすめ記事