2017-07-31 3 views
2

ファイルを空にするには、コマンドラインの先頭に>を付けてbashの#> file.txtと入力することができますが、 >の?>(より大きい)コマンドラインの先頭で正確に何を行うか

ありがとうございました!

+1

実際には、ファイルを単に切り詰める ':> file.txt'の方が良いでしょう。 'echo -n" "> file.txt'または' printf ""> file.txt'の省略形と考えてください。 –

+0

>は、コマンドの標準出力を左に取り、それを右のファイルにリダイレクトします。 –

+1

参照:[:(コロン)GNU Bashビルトインの目的は何ですか?**](https://stackoverflow.com/questions/3224878/what-is-the-purpose-of-the-colon- gnu-bash-builtin) –

答えて

2

bashシェルでのリダイレクトは、bashによって読み取られ、実装されます。例えば、# ls > /tmp/ls.outコマンドを実行すると、bashはコマンドを読み込んで解析し、リダイレクト演算子(>)を識別します。 Bashは/tmp/ls.outファイルを書き込みモードで開きます(ファイルが存在する場合、ファイルを切り捨てます)。その後、bashpipe()-dup2()-fork()-exec()シーケンスを実行して、STDOUTファイルハンドルlsコマンドをオープンファイルハンドル/tmp/ls.outファイルにマップします。この方法でbashはリダイレクトを実現します。

また、bashは、file.txtがリダイレクト対象であることを識別し、書き込みモードで開きます。 open()呼び出し(書き込みモード)は、file.txtファイルを切り捨てます。その後、bashは実行するコマンドが見つからず何もしません。

要するに、書き込みモードでシェルがファイルをオープンしているため、既存のファイルは切り捨てられます。 Bashはファイルを切り捨てるために何も特別なことをしません。

0

「とは対照的に、あなたは「>」を使用しているので、あなたが>>名「file.txtを」

のファイルにあなたは何もない(またはnull)の出力を供給したいと述べていますあなたがファイルが存在する場合、最初に置き換えなければならないと言っています。

関連する問題