私はちょうど今与えられたコマンドに出くわしました-
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
私が推測できることから、それはおそらく.bash_profileの変更をコミットするために使用されますが、正確には何に使用されますか?
私はちょうど今与えられたコマンドに出くわしました-
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
私が推測できることから、それはおそらく.bash_profileの変更をコミットするために使用されますが、正確には何に使用されますか?
回答:
それは前にプログラムの標準出力をリダイレクトし、>>
後に与えられたファイルに追加します。
>> file command
echo a b >> c d
追加a b d
しますc
。
>>
ますか?では>>
、あなたはファイルにコマンドの出力を追加します。
コマンドの例は、基本的に次のいくつかの部分で構成されています。
コマンド >> ファイル名
したがって、の出力command
はに追加されfilename
ます。
echo
どうなりますか?特定のケースでは、echo "…"
コマンドは入力引数を「標準出力記述子」と呼ばれる「stdout」に出力します。入力引数のecho
後に改行(\n
)が続くので、改行を取得できます。
ここで、「標準出力記述子」は、コマンドを実行したときにシェルに表示される出力ストリームにすぎません。(つまり、echo foo
入力してEnterキーを押すfoo\n
と、echo
コマンドの実際の出力が表示されます。これは、シェルにfoo
改行が続くように表示されます。)
基本的に、コマンドラインに書き込むものはすべてstdoutを使用しています。通常、エラーメッセージに使用される「stderr」と呼ばれる別の記述子もあります。また、標準出力のように印刷されるため、散在する場合があります。また、入力に使用されるstdin記述子があります。詳細については、この記事を参照してください。
いつでもstdoutをファイル記述子にリダイレクトできます。これは、次のいずれかの演算子を使用して実行できます。
>
ファイル記述子にリダイレクトします。ファイルが存在しない場合は作成します。既に存在する場合は、書き込む前にファイルを切り捨てます。したがって、ファイルはstdoutで上書きされます。
>>
ファイル記述子に追加します。ファイルが存在しない場合は作成します。
2>
または2>>
同様の方法でstderrをリダイレクトすることもできます。または、stderrとstdoutを1つのファイルに結合できます2>&1
。リダイレクトの詳細といくつかの例については、この小さなチュートリアルをご覧ください。
一般に、特定のシェルコマンドに関する視覚的なガイダンスと情報を提供する、explainshell.comを試してください。
例を見るのが好きなTLDRの人々のために。
>>の前のコマンドの標準出力(エラーではない)は、その名前の付いたファイルの最後に追加されます。
したがって、ファイル「flintstones.txt」に含まれている場合;
Fred
Barney
echo Dino >> flintstones.txt
ファイルの最後に「Dino」が追加されます。
Fred
Barney
Dino
echo Dino > flintstones.txt
内容を表示する例を追加することをお勧めしますDino
。
繰り返しますが
> somefile.txt
ファイルのコンテンツ全体が消去されます。
> file
ファイルをクリアしますが、>> file
何もしません。
man bash
かなり正式な言語で書かれているため、理解するのは難しいかもしれません。一方、このフレーズbash >>
は、Googleで役に立つリンクをほとんど返しません。Googleに依存せずに知識を集約したいのは事実です。このため、簡単に検索できる回答のある質問でも適合します。しかし、あなたがどちらもすぐに答えを提供していないという事実は、(参照?することができます私は自分の質問に答える)も研究の欠如を示し(あなたはおそらく理解するための助けを必要とすること)は、既存のリソースを指摘しました。