次のスクリプト時々私に同じことを与えるcan't remove a/b as it's not empty
ssh -T user@host <<EOF
cd somewhere
rm -rf a/b
EOF
ただし、サーバーにログインして実行したrm -rf a/b
後、問題は発生しませんでした。
ファイルを生成する他のプロセスがありますa/b
。これは関係ありますか?
とにかく、「a / b」が削除されたことを確認するスクリプトをどのように作成できますか?
ベストアンサー1
a / bにファイルを生成する他のプロセスはありますか?関係ありますか?
おそらく。おそらく、rm -rf
すべてのファイルを最初に削除してから、すべてのディレクトリを削除します。その後、rmdir
ディレクトリが空でない場合、ディレクトリを削除するためのシステムコールは失敗します。rm -rf
ディレクトリが空であることを確認する競合状態がある可能性があり、その後他のプロセスが最終的にrm -rf
呼び出されますが、rmdir
他のプロセスはファイルを事前に生成します。
Faheemの提案は良いです。ls
エラー条件を入力してください。
ssh -T user@host <<EOF
cd somewhere
rm -rf a/b || ( ls -a a/b && exit 1 )
EOF