suコマンドの終了ステータス


suコマンドの-cオプションを使ったときの終了ステータスについて調べてみた。
testユーザは存在し、aaaユーザは存在しない。また、testファイルも存在しない。

まずはsuコマンドの正常終了時
# su - test -c "ls"
# echo $?
出力は0であった。

次にsuコマンドの異常終了時
# su - aaa -c "ls"
# echo $?
出力は1

次にsuコマンドの-cオプションの中のコマンドの異常終了時
# su - test -c "ls test"
# echo $?
出力は2

# ls test
の終了ステータスも2であり、-cオプションが失敗すると2が返されるのか、それとも-cオプションで実行されたコマンドの終了ステータスが返されるのか疑問だったため、以下を実行
# su - test -c "exit 3"
# echo $?
出力は3

まとめ

suコマンド成功で終了ステータス0、失敗で1、-cオプションを使用した場合についてはそのコマンドの終了ステータスが返される。

感想

あとあと考えてみると、suで権限変えた後、-cオプションの中のコマンド実行してるから、当然$?には-cオプションで指定したコマンドの終了ステータスが入ってるなと…