/dev/null を入力としたリダイレクトの意味


たまに次のようなシェルスクリプトを見かけることがあるのですが、`/dev/null` を入力にする意味を教えてください。

[code]

    cp -i %p /mnt/server/archivedir/%f < /dev/null
    
[/code]




そのコードを書いた人の真の意図はその人に訊かないとわかりませんけど推測するなら

  * `-i` オプションを付けているので上書きしようとするとプロンプトが出る
  * プロンプトに対する入力を `</dev/null` が抑制し no を入力したことになる

ことから  
「上書きしないときはコピーを実施する（警告なし）」  
「上書きしようとしたらログファイルに警告を残す（コピーはしない）」  
ということであろうと思われるです。

`cp -n` だと上書きしないけどメッセージが残らないので...

あと Linux で採用している GNU coreutils の GNU `cp` でなくて、  
古い unix (ウチにある HPUX11.11 とか) の native `cp` だと  
`-n` が無いものがあり「上書き禁止」を指定できません。  
`-n` が無い場合に上書き禁止するには `-i </dev/null` が古くからあるイディオムです。  
いちいち `test -e` とかするより簡単。




そのコードを書いた人の真の意図はその人に訊かないとわかりませんけど推測するなら

  * `-i` オプションを付けているので上書きしようとするとプロンプトが出る
  * プロンプトに対する入力を `</dev/null` が抑制し no を入力したことになる

ことから  
「上書きしないときはコピーを実施する（警告なし）」  
「上書きしようとしたらログファイルに警告を残す（コピーはしない）」  
ということであろうと思われるです。

`cp -n` だと上書きしないけどメッセージが残らないので...

あと Linux で採用している GNU coreutils の GNU `cp` でなくて、  
古い unix (ウチにある HPUX11.11 とか) の native `cp` だと  
`-n` が無いものがあり「上書き禁止」を指定できません。  
`-n` が無い場合に上書き禁止するには `-i </dev/null` が古くからあるイディオムです。  
いちいち `test -e` とかするより簡単。

