ファイルを空にするには、コマンドラインの先頭に>を付けてbashの#> file.txt
と入力することができますが、 >の?>(より大きい)コマンドラインの先頭で正確に何を行うか
ありがとうございました!
ファイルを空にするには、コマンドラインの先頭に>を付けてbashの#> file.txt
と入力することができますが、 >の?>(より大きい)コマンドラインの先頭で正確に何を行うか
ありがとうございました!
bashシェルでのリダイレクトは、bashによって読み取られ、実装されます。例えば、# ls > /tmp/ls.out
コマンドを実行すると、bashはコマンドを読み込んで解析し、リダイレクト演算子(>
)を識別します。 Bashは/tmp/ls.out
ファイルを書き込みモードで開きます(ファイルが存在する場合、ファイルを切り捨てます)。その後、bash
はpipe()-dup2()-fork()-exec()
シーケンスを実行して、STDOUTファイルハンドルls
コマンドをオープンファイルハンドル/tmp/ls.out
ファイルにマップします。この方法でbash
はリダイレクトを実現します。
また、bash
は、file.txt
がリダイレクト対象であることを識別し、書き込みモードで開きます。 open()呼び出し(書き込みモード)は、file.txt
ファイルを切り捨てます。その後、bash
は実行するコマンドが見つからず何もしません。
要するに、書き込みモードでシェルがファイルをオープンしているため、既存のファイルは切り捨てられます。 Bashはファイルを切り捨てるために何も特別なことをしません。
「とは対照的に、あなたは「>」を使用しているので、あなたが>>名「file.txtを」
のファイルにあなたは何もない(またはnull)の出力を供給したいと述べていますあなたがファイルが存在する場合、最初に置き換えなければならないと言っています。
実際には、ファイルを単に切り詰める ':> file.txt'の方が良いでしょう。 'echo -n" "> file.txt'または' printf ""> file.txt'の省略形と考えてください。 –
>は、コマンドの標準出力を左に取り、それを右のファイルにリダイレクトします。 –
参照:[:(コロン)GNU Bashビルトインの目的は何ですか?**](https://stackoverflow.com/questions/3224878/what-is-the-purpose-of-the-colon- gnu-bash-builtin) –