CD `(バックティック)の目的は何ですか?


56

以下は、FedoraとCentOSで同じように動作します。

cd mydirectory

動作します。

cd notadirectory

動作します(Bashからエラーを取得します)。

しかしながら、

cd `

何らかの種類のプロンプトが表示されます:

>

私が入力しようと思ったものは何も応答しません。ただ次の行に戻って再度プロンプトを出します。私は単にCTRL+ Cを使用して終了しますroot@localhost

これの目的は何ですか、それで何ができますか?

ありがとう!



6
だから、あなたの質問には詳細である>ことは、他の状況で発生する可能性があるため、バッククォート約
トビアスKienzler

回答:


123

入力したものはバックティックです -これは、コマンドとして入力したものを評価するためにbashする命令の始まりです。>それでも次の行にコマンドを入力している示すために表示されます。

バックティックを閉じると、コマンド全体が実行されます。例えば

~$ cd `
> echo /var`
/var$

17
ネストすることもできます。やや現実的な例:cd `dirname \`which ls\``= "ls"バイナリがあるディレクトリにcd。(つまりcd /bin、であるため/bin/ls)[編集:
ふう、マークダウンが難しいことを回避する

54
@MSaltersおそらく現代のbashが$()を好む理由につまずいたでしょう``。あなたの例(プラス正しい引用符)cd "$(dirname "$(which ls)")"は、非常に少ない狂気になります。
ミューザー

31
@Muzerそれを好むのはbashだけではありませんが、POSIX仕様では$()バッククォートよりも使用することが推奨されています。
ヒトデ

59

JohnCの答えはすでに裏返しを説明しています。しかし、あなたも疑問に思っているのは>プロンプトです。これは継続プロンプトであり、バックティックによってトリガーされるだけでなく、常にコマンドの入力が完了していないことをシェルが明確に認識したときにトリガーされます。最も簡単な例は\、入力行の末尾に明示的な行継続を配置することです(長い入力の分割に役立ちます)。

$ echo \
> hallo

PS1コマンドプロンプトの外観を制御するようにPS2、継続プロンプトを変更するように設定することもできます。たとえば、

$ export PS2="(cont.) "
$ echo \
(cont.) hallo

継続が発生する多くの理由があります。単一のバックティックは不完全ですが、次のように入力することもできます

ls -l `which cp`

一行で(サイドノート:使用することをお勧めします$(し、)代わりに、括弧は、それが明らかに作るので、どこ単一バッククォートはそれがより困難見ることにする一方で、拡張開始と終了、どこ1の不足しているとネスト...。)。継続プロンプトのその他の考えられる理由:

  • 行方不明doneの後whilefor
  • fi後に行方不明if
  • esac後に行方不明case
  • サブシェルなどの閉じ括弧が欠落している (cd $HOME; cat .bashrc)
  • 配管後に不足しているコマンド|だけでなく、条件付き実行||&&(ではない&けれども、それは単にバックグラウンドで実行されているコマンドを作っているので)
  • 閉じ引用符がない('または"

不思議なこと}に、変数展開後にブレースが欠落して${いると継続プロンプトが表示されますが、スペースが挿入されているため失敗します。

$ echo ${
> PS2}
bash: ${
PS2}: bad substitution

2
引用符を使用する場合も同じことが起こります:)
スティーンシュッテ

1
この質問に対する答えは、サイドバーで見たときにすでに知っていましたが、非常に優れた詳細な答えを得るために、想像に反して+1を追加したかったのです。これはStackExchangeサイトをすばらしいものにする一種のコンテンツです。だから...ありがとう、そして最高であり続ける。
-Unkwntech

4

これは、コマンドがまだ完了していないことを意味します。実際、文字のバックティックを`使用して、インラインコマンドを区切ります。

例:

cd /tmp # Go to /tmp
pwd # Prints the current working  directory
ls `pwd` # Lists the content of the current working directory

0

バックティックはコマンド置換を開始/終了します。シェルはバックティック内のコマンドを読み取り、結果を解釈して、それらの結果をコマンドに配置します。例えば:。ls which cpは、 "which cp"が実行され、そのコマンドの結果、つまり/ bin / cpがlsコマンドの引数として使用されます。ただし、この動作は推奨されておらず、より明示的で読みやすい$(cmd)コマンドの置換が優先されます。

cdと入力するとき `シェルは、コマンドが実行され、バックティックで閉じられることを期待しています。

中かっこを使用した変数展開の場合、展開が行われる前にこれらの中かっこが字句的に評価されるため、シェルは継続プロンプトを表示します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.