ターミナルコマンドで `>>`はどういう意味ですか?

Jun 28 2018

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

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

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

回答

31 kai-dj Jun 28 2018 at 12:06

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

48 slhck Jun 28 2018 at 14:13

簡単な答え—何をし>>ますか?

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

サンプルコマンドは、基本的に次のいくつかの部分で構成されています。

コマンド>>ファイル名

したがって、の出力commandはに追加されfilenameます。


の特定のケースではechoどうなりますか?

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

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

基本的に、コマンドラインに書き込むものはすべてstdoutを使用しています。エラーメッセージに通常使用される「stderr」と呼ばれる別の記述子もあります。また、stdoutのように印刷されるため、散在する場合があります。また、入力に使用されるstdin記述子があります。詳細については、この記事を参照してください。

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

stdoutはいつでもファイル記述子にリダイレクトできます。これは、次のいずれかの演算子を使用して実行できます。

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

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

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

シェルコードの特定の部分が何を意味するのかをどうやって理解できますか?

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

7 MarkBoyce Jun 29 2018 at 09:58

例を見たいだけのTLDRの人々のために。

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

したがって、ファイル「flintstones.txt」に含まれている場合;

Fred
Barney

echo Dino >> flintstones.txt その結果、ファイルの最後に「Dino」が追加されます。

Fred
Barney
Dino