bashの「true」の目的は何ですか? 「if sudo true; then」

bashの「true」の目的は何ですか? 「if sudo true; then」

私はユーザーにスーパーユーザー権限があるかどうかをテストし、そうでない場合はスーパーユーザー権限を要求するbashスクリプトを作成しました。最終的に、次の2行を削除できるように、2番目の "if"ステートメントを逆に置き換えようとしています(echo "password ok"と次の行のelse)。

# Root user only
if [[ "$EUID" != 0 ]]; then
    sudo -k # make sure to ask for password on next sudo
    if sudo true; then
        echo "Password ok"
    else
        echo "Aborting script"
        exit 1
    fi
fi

echo "do my ops"

4行目の目的が「true」であることは、単に空のステートメントですか?

4行目でテストを逆にする必要がありますが、どうすればよいですか?私が試したことは次のとおりです。

if sudo false; then  
if sudo true == false; then
if [!(sudo true)]; then

ベストアンサー1

truebashのキーワードではなく、成功した終了コードですぐに終了するプログラムです。同様に、false失敗した終了コードで終了するプログラムです。

ターミナルで両方のプログラムを実行してから、$?最後のプログラムの終了コードを含む変数を読み取ってみてください。

true
echo $? # 0
false
echo $? #1

if sudo trueと同じではありませんif sudo == true。を使用してプログラムを実行し、if sudo true終了コードを確認します。truesudo

だから:

if sudo false; thenプログラムがsudoとして実行されていますfalse。戻り値は常に false です。

if sudo true == falsetrue引数を使用して==プログラムを実行します。これは明らかにあなたが望むものではありません。falsesudo

if [!(sudo true)]無効な構文です。

あなたが探しているもの

if ! sudo true;

おすすめ記事