bashが私のコマンドを実行するのではなく `> `を表示するのはなぜですか?

bashが私のコマンドを実行するのではなく `> `を表示するのはなぜですか?

Bashが時々私のコマンドを拒否してコマンドを実行するのではなく、単により大きな記号で始まる新しい行を始めるのはなぜですか? Enterを押すたびに新しい行が追加されます。これを回避する唯一の方法はCtrl+を押すことですC

適切なケース:時々、ノートブックのファン速度を制限する必要がある小さなコマンドは機能しなくなります。

RegenbogenBook:Resources Vincent$ smc -k F0Mx -w $(python -c 'print hex(2800 << 2)[2:]’)
>
>
>

私は非常に明確なものを見逃していると感じましたが、この基本的な事項はFAQで扱われていないか、検索でアクセスできません...

答え1

おそらく手動で入力するのではなく、ドキュメントからコマンド(またはその一部)を切り取って貼り付けたのでしょう。通常、これは違いはありませんが、この場合、2番目の引用符文字は「アポストロフィ」()ではなく「右側の単一引用符」(')に挿入されます。違いはわずかです。詳しくはこのページをご覧ください。

http://en.wikipedia.org/wiki/Quotation_mark_glyphs

これは、後で参照できるように文書に最初にコマンドを入力すると、ワードプロセッサが自動的に2番目のアポストロフィを正しい一重引用符に変換するために発生する可能性があります。これは画面上の文字をより見やすくするために行われますが、bashはその文字を有効なクローズ引用符として認識しないため、問題が発生します。>もともと引用符がまだ閉じていないと思うので、追加の入力を要求するために「」を印刷します。

回避策は、文字をアポストロフィに変更することです。キーボードから手動でbashに再入力するだけです。将来の切り取り+貼り付けが正しく機能するように、ドキュメントで編集することもできます。

答え2

あなたが>見ているのは、シェルがまだ入力を待っているからです。 Fretantiniの回答によると、あなたは文を正しく終了していません。

時々、補助入力プロンプト(BashではPS2と呼ばれる)が表示されることがあります。たとえば、一部の対話型コマンドはmailxそれを使用して電子メールフィールドに入力します。 +send to shell を押すと、セカンダリ入力プロンプトをオフにできますEOFCtrlD

答え3

最後の参照はラウンド参照なので、Pythonに渡す文字列はまだ完全ではありません。構文の色付けの違いを確認できます。

smc -k F0Mx -w $(python -c 'print hex(2800 << 2)[2:]’)

そして

smc -k F0Mx -w $(python -c 'print hex(2800 << 2)[2:]')

答え4

質問

他の人が言ったように、OPpythonにはあなたの声明に終わらない文字列があります。丸め引用符と一重引用符を混同しています。


予想使用量

OPが分からないことを考えるとレベル2のヒント、OPからの例を見せたい。最初からLinux - SystemDを含むバージョン7.6本を読んで、それがどのように機能するかを説明してください。ほとんどの場合、プロンプトは次のように使用されます。

cat > version-check.sh << "EOF"
#!/bin/bash
# Simple script to list version numbers of critical development tools

export LC_ALL=C
bash --version | head -n1 | cut -d" " -f2-4
echo "/bin/sh -> `readlink -f /bin/sh`"
echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-
bison --version | head -n1
if [ -e /usr/bin/yacc ];
  then echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";
  else echo "yacc not found"; fi

bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6-
echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
diff --version | head -n1
find --version | head -n1
gawk --version | head -n1
if [ -e /usr/bin/awk ];
  then echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`";
  else echo "awk not found"; fi

gcc --version | head -n1
g++ --version | head -n1
ldd --version | head -n1 | cut -d" " -f2-  # glibc version
grep --version | head -n1
gzip --version | head -n1
cat /proc/version
m4 --version | head -n1
make --version | head -n1
patch --version | head -n1
echo Perl `perl -V:version`
sed --version | head -n1
tar --version | head -n1
xz --version | head -n1

echo 'main(){}' > dummy.c && g++ -o dummy dummy.c
if [ -x dummy ]
  then echo "g++ compilation OK";
  else echo "g++ compilation failed"; fi
rm -f dummy.c dummy

EOF

推理

最初から広く使用されているLinux用のツールは端末だけです。本がオフホストであることを確認するために、本はOPで問題があると見なすアクションを使用してすべてのスクリプトと設定ファイルを入力するように指示します。最初の行はここのドキュメントversion-check.sh完了すると名前が表示されます。以下は、完成したスクリプトを含むCygwin端末のスクリーンショットです。

テキストエディタなしでCygwinスクリプト

このスクリプトには、ドキュメントにスペースを作成して読みやすくするためのCR / LFが含まれています。各CR / LFは新しいインスタンスを作成し、>最後にEOFすべての>バッファが作成されますversion-check.sh

関連情報