バッシュから。
何を使うべきかを理解するのに問題がありますか?
私のすべてのスクリプトは ">>/dev/stderr" を使用します。
bashプロンプトで試した場合:
echo test >>/dev/stderr
有効な
echo test >> /dev/stderr
有効
echo test >/dev/stderr
な有効
echo test > /dev/stderr
echo test >>&2
失敗しました!
echo test >> &2
失敗しました!
echo test >&2
ジョブが
echo test > &2
失敗しました!
すべてのスクリプト>&2
を 。
また、まったく機能せず(権限が拒否されました)、操作のみのssh(後で)にsu SomeUser
大きな影響を与えるようです。>>/dev/stderr
>&2
ベストアンサー1
>& n
シェル構文は次のとおりです。ファイル記述子を直接コピー。ファイル記述子2はstderrです。これがうまくいく方法です。 stderrだけでなく、他のファイル記述子をコピーすることもできます。コピーファイル記述子が切り捨てられず(stderrがファイルの場合でも)トークンである>&
ため、ここでは追加モードを使用できません。したがって、スペースを入れることはできませんが、>& 2
動作します。
>> name
は許可される他の構文です。ここで、はname
ファイル名です(トークンは>>
)。この場合、/dev/stderr
オペレーティングシステム固有の処理では、標準エラーに対応するファイル名を使用しています(Linuxではシンボリックリンク/proc/self/fd/2
)。 stderrが端末の場合、追加モードとトリミングモードの両方が同じことを行います。なぜなら、切り取ることができないからです。ただし、標準エラーがファイルの場合〜する切り捨て:
anthony@Zia:~$ bash -c 'echo hi >/dev/stderr; echo bye >/dev/stderr' 2>/tmp/foo
anthony@Zia:~$ cat /tmp/foo
bye
sshでエラーが表示された場合は、/dev/stderr
サーバー管理者がシンボリックリンクの操作を防ぐいくつかのセキュリティ対策を適用した可能性があります。 (例:/proc
またはにアクセスできません/dev
)。どちらのアプローチも、あらゆる種類の奇妙な破損を引き起こすと予想していますが、冗長ファイル記述子構文を使用するのは完全に合理的で、おそらくやや効率的なアプローチです。私は個人的にそれを好む。