ホームページ  >  記事  >  バックエンド開発  >  Go で sudo コマンドを実行すると、exec.Command() が終了ステータス 1 を返すのはなぜですか?

Go で sudo コマンドを実行すると、exec.Command() が終了ステータス 1 を返すのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-27 13:45:10605ブラウズ

Why Does `exec.Command()` Return Exit Status 1 When Running `sudo` Commands in Go?

Go での Os Exec Sudo Command

背景

Go とゴルーチンの探索中、ユーザーはでコマンドを実行すると問題が発生する可能性があります。形式:

sudo find /folder -type f | while read i; do sudo -S chmod 644 "$i"; done

質問

  • コマンドが「終了ステータス 1」を返すのはなぜですか?
  • より詳細な情報を取得する方法エラーmessage?

Answer

  • 終了ステータスの原因 1: exec.Command() 関数は指定されたプログラムを実行します直接。ただし、指定されたコマンドには、シェル スクリプトを介して接続された複数のプログラムが含まれます。シェル スクリプトを実行するには、次の構文を使用します:
cmd := exec.Command("/bin/sh", "-c", "sudo find ...")
  • 詳細なエラー メッセージ: ターミナルでコマンドを直接実行して、より詳細なエラー メッセージを取得します。失敗した場合は、ターミナル出力でエラー メッセージがないか確認してください。

コードの変更

変更されたコードは次のとおりです:

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    cmd := exec.Command("/bin/sh", "-c", "sudo find /folder -type f | while read i; do sudo -S chmod 644 \"\"; done")
    out, err := cmd.CombinedOutput()
    if err != nil {
        fmt.Printf("Error: %s\nOutput: %s", err, out)
    }
}

以上がGo で sudo コマンドを実行すると、exec.Command() が終了ステータス 1 を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。