そのようなリダイレクト "|>"は単なるエラーですか、それとも何か意味がありますか?


9

誤って入力したのですが、bashはエラーを出力しませんでした(しかし、空のファイルを作成しました)。(例:日付|> tmp.txt)


1
コマンドが次の形式でないことを確認しますかdate |> tmp.txt cmd2?それが答えを変えるからです。
コンラートルドルフ

回答:


17

これは、2番目の部分が空のコマンドで、リダイレクトのみが含まれるパイプラインのようです。date | >file解釈しやすいようにそれを書く。emptyコマンドは何もせず、リダイレクトを処理してファイルを作成します。

date >| file一方noclobber、通常の>既存ファイルの上書きを防ぐシェルオプションのオーバーライドとして機能します。

$ touch foo; set -o noclobber
$ date > foo
bash: foo: cannot overwrite existing file
$ date >| foo       # works

1

はい、bash > fileはという名前のファイルにリダイレクトするため、エラーはスローされませんfile。あなたの場合、ファイルにリダイレクトするものは何もないので、bashはfile何も含まないファイル名を作成します。

[bd@centos-6.5 my-tests]$ date | > my_file
[bd@centos-6.5 my-tests]$ cat my_file
[bd@centos-6.5 my-tests]$ 

おかしい。Zshの動作は異なります。コマンドの後にmy_fileはの出力が含まれますdate
NI

12
@NajibIdrissiは、zshリダイレクトのみzshがあり、$NULLCMDコマンドがない場合、入力リダイレクトのみがある場合、コマンド(catデフォルトで)または$READNULLCMD(ページャーでデフォルト)を実行します。
ステファンChazelas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.