ルートモードで「|」コマンドの実行中に問題が発生しました。コマンドは次のとおりです。
cat xyz.sh | chmod 744 xyz.sh | echo "hello" > xyz.sh
以下を使用してこのコマンドを実行するとき./xyz.sh、エラーが発生しました
./xyz.sh: line 1: hello: command not found
私を指定してください。何かが間違っていたらどうしよう!
答え1
まず、理解する必要があります。パイプラインとは何ですか?:
パイプラインは、制御演算子で区切られた1つ以上のコマンドシーケンスです
|
。最後のコマンドを除く各コマンドに対して、シェルはコマンドの標準出力を次のコマンドの標準入力に接続する必要があります。
パイプラインでは、次のことが発生します。
cat
内容をxyz.sh
次のコマンドの標準入力に送信します。chmod
そのデータを受け取りますが、私が知っている限り、そのデータで何もしません。代わりに、次のコマンドの権限を変更し、標準xyz.sh
入力には何も送信しません。echo
echo
何も受信されませんが、標準入力は最初から読み取られないため重要ではありません。 〜のようにスチールドライバーecho
内容を単語で上書きしてください。xyz.sh
hello
その後、実行しようとすると、xyz.sh
シェルが見つけた唯一の文は、コマンドで実行しようhello
とします。インストールされたコマンドがhello
ないため、エラーが発生します。hello
command not found