web-dev-qa-db-ja.com

端末コマンドで `>>`はどういう意味ですか?

私はちょうど今以下に与えられたコマンドに出くわしました -

$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile

私が推測できることから、それはおそらく.bash_profileの変更をコミットするために使用されますが、それは正確に何のために使用されますか?

11
monster

プログラムの標準出力を>>の前にリダイレクトし、それを与えられたファイルに追加します。

31
kai-dj

簡単な答え - >>は何をするのですか?

>>では、コマンドの出力をファイルに追加します。

あなたのコマンド例は基本的にいくつかの部分から成ります:

コマンド >> ファイル名

そのためcommandの出力はfilenameに追加されます。


echoという特定の場合はどうなりますか?

あなたの特定のケースでは、echo "…"コマンドはその入力引数を「標準出力記述子」である「stdout」に出力します。 echoへの入力引数の後には改行(\n)が続くので、改行します。

ここで、「標準出力記述子」とは、コマンドを実行したときにシェルに表示される出力ストリームに他なりません。 (つまり、echo fooと入力してEnterキーを押すと、foo\nechoコマンドの実際の出力になります。これは、シェルによってfooの後に改行が続いて表示されます。)

基本的にあなたのコマンドラインに書いているものはすべてstdoutを使っています。エラーメッセージに一般的に使用される「stderr」と呼ばれる別の記述子もあります。また、標準出力のように印刷されるため、時々それらが散在する可能性があります。そして、入力に使われる標準入力記述子があります。詳しくは この記事 をご覧ください。

シェルでどのようにして出力をリダイレクトしますか?

いつでも標準出力をファイル記述子にリダイレクトできます。これは、次のいずれかの演算子で行うことができます。

  • >はファイル記述子にリダイレクトします。ファイルが存在しない場合は作成します。すでに存在する場合は、書き込み前にファイルを切り捨てます。そのため、ファイルは標準出力で上書きされます。

  • >>はファイル記述子に追加します。ファイルが存在しない場合は作成します。

同様の方法で2>または2>>を使用してstderrをリダイレクトすることもできます。あるいは、stderrとstdoutを1つのファイルにまとめることもできます。2>&1はそれを行います。リダイレクトの詳細といくつかの例については、 この小さなチュートリアル を参照してください。

シェルコードの特定の部分が何を意味するのか、どうすればわかりますか?

一般的には、 explainshell.com を試してみてください。これにより、特定のシェルコマンドに関する視覚的なガイダンスと情報が得られます。

48
slhck

ちょうど例を見たい TLDR の人々のために;

>>の前のコマンドの標準出力(エラーではない)が、それにちなんで名付けられたファイルの末尾に追加されます。

したがって、ファイル "flintstones.txt"に次のものが含まれているとします。

Fred
Barney

echo Dino >> flintstones.txtは、ファイルの最後に 'Dino'が追加されることになります。

Fred
Barney
Dino
7
Mark Boyce