「ここに文書化」を1行のコマンドとして使用しますか?

「ここに文書化」を1行のコマンドとして使用しますか?

インストールする一部のソフトウェアでチェックサムを実行するコマンドは次のとおりです。

echo "85762db0edc00ce19a2cd5496d1627903e6198ad850bbbdefb2ceaa46bd20cbd install.sh" | sha256sum -c

sha256sumしかし、コマンドと一緒に使用したい最初。したがって、私たちはheredocを使用して以下を達成します。

sha256sum -c << EOF
85762db0edc00ce19a2cd5496d1627903e6198ad850bbbdefb2ceaa46bd20cbd  install.sh
EOF

しかし、今、すべての内容を一行で書きたいと思います。だから、私は次のようにします。

sha256sum -c << EOF ; 85762db0edc00ce19a2cd5496d1627903e6198ad850bbbdefb2ceaa46bd20cbd  install.sh ; EOF

しかし、これはうまくいきません。しかし、してはいけないセミコロンが;「別のコマンドを実行したい」を意味する場合は動作しますか?

この順序でインポートされますが、別の方法で1行に書き込むことはできますか?そうでなければ、なぜ各行で何をすべきかを伝えることはできませんが、一行では何をすべきかを教えてくれませんか?

答え1

しかし、セミコロンは機能しないのですか? 「他のコマンドを実行したい」という意味ですか?

いいえ、正確には;「別のコマンドを実行します」という意味ですが、単一のコマンドの途中に挿入するからです。あなたのコマンドは次のとおりです

sha256sum -c << EOF
85762db0edc00ce19a2cd5496d1627903e6198ad850bbbdefb2ceaa46bd20cbd  install.sh
EOF

多くではなく注文です。セミコロンで区切ることができず、ここでドキュメントがどのように機能するかは別々の行を想定しているため、1行で書くことはできません。ただし、一部のシェル(例bashここに文字列がありますこれがあなたが探しているものかもしれません:

sha256sum -c <<< "85762db0edc00ce19a2cd5496d1627903e6198ad850bbbdefb2ceaa46bd20cbd  install.sh"

文字列は、文字列をコマンド(またはファイル記述子、しかし気にしないでください)への入力として渡す簡単な方法です。上記の内容は同じだと思います。

printf '%s\n' "85762db0edc00ce19a2cd5496d1627903e6198ad850bbbdefb2ceaa46bd20cbd install.sh" | sha256sum

答え2

コードを移植可能に保つことができます。そしてsha256sum次のようにコマンドを左の列(前ではないecho)に移動します。

echo "85762db0edc00ce19a2cd5496d1627903e6198ad850bbbdefb2ceaa46bd20cbd install.sh" \
| sha256sum -c

sha256sumこれは右に出る読みやすさの問題を解決しますecho。このコードを使用している人は、次のことがわかります。

答え3

セミコロンと改行は、単一のコマンドの終わりなど、いくつかの場所で互いに置き換えることができます。しかし、状況は確かに場所によって異なります。

したがって、これらは同じです:

echo one
echo two
# and
echo one; echo two;

ただし、次の作業は実行されます。

if true; then
   echo hi
fi
echo foo |
   wc

これらは以下ではありません:

if true; then; echo hi; fi
echo foo |; wc

ここの記事はもう少し特別です。行単位で作業します。シェル外の文法構造

これは、次のことができることを意味します。

# semicolon and another command before the here-doc
cat <<EOF; echo there
hello
EOF

# pipeline continues past the here-doc
cat <<EOF |
hello
EOF
sed -e 's/$/ there/'

# multiple here-docs used on the same line
cat <<THIS; cat <<THAT
hello
THIS
there
THAT

したがって、コマンドライン

sha256sum -c << EOF ; 8576...  install.sh ; EOF

シェルで終わるhere文書を待ちEND、次にhere文書を入力として使用してsha256sumコマンドを実行8576...しますEOF。後者の場合、「コマンドが見つかりません」エラーが発生する可能性があります。

〜のようにテデンは返事でこう言いました。、here-stringはhere-docの1行バージョンで、ほとんどの機能が豊富なシェルではうまく機能しますが、標準のシェル言語(DebianのDashやBusyboxのshなど)に厳密に制限されているシェルでは機能しません。

sha256sum -c <<< "8576...  install.sh"

関連情報