スクリプト内からスクリプトファイルを削除しても安全ですか?


9

スクリプトがあると想像してみてくださいfoo。これは、ユーザーがログインしたときに1回実行する必要があり、正常に実行された後は必要ありません。

私の質問:スクリプト内からスクリプトファイルを削除しても安全ですか?

例えば:

#!/bin/bash

# do something
...

# if successful
rm /path/to/foo
exit 0

2
まったく無関係というわけではありませ#!/bin/bash -eんが、何も問題がない場合にのみスクリプトファイルを確実に削除するために使用できます。
sr_ 2012

3
はい、安全です。あなたが知りたい場合は、なぜ、読みstackoverflow.com/questions/2028874/...
jofel

2
@jofelいいですね、これを答えにすることをお勧めします。:-)
htorque

疑わしい場合は、最後の2行をに置き換えることができますexec rm /path/to/foo
kasperd

回答:


5

ファイルハンドラーは対応するファイルを(再)移動しても影響を受けないため、実行中にシェルファイルを削除しても安全です。

詳細については、こちらを参照してください


2
ただ、(つまり、お使いのシステムに応じて、それが仕事ではないかもしれないことに注意してくださいrm <it-self>。HP-UX上で成功しないだろう
Ouki

1
@大木、なぜ?それはPOSIXに違反しませんか?
maxschlepzig

3
@maxschlepzig POSIXを使用すると、現在実行中の実行可能ファイルへの最後のリンクの削除に失敗するunlinkことができETXTBUSYます。(奇妙なことに、「純粋な手順」と「共有テキスト」は仕様で定義されていません。AFAIKは実行可能プログラムのコンポーネントを意味します:実行可能ファイル自体またはそれが使用するライブラリ)。HP-UX以外のすべての主要なuniceでは、実行可能ファイルの名前を変更してリンクを解除できます。
Gilles 'SO-悪をやめ

2
@Oukiスクリプトをで終了するだけで簡単に移動できexec rm /path/to/fooます。
kasperd

0

私はいつもこれについて緊張していたので、私はそうしました:

(sleep 5; rm /path/to/shell/script) &
exit 0

または、一時的なスクリプトにチェーンすることもできます。

echo >/tmp/rmme rm /path/to/shell/script
. /tmp/rmme

1
どちらの方法でも、スクリプトが削除されるまでにスクリプトの実行が完了していないシェルプロセスが存在します。
kasperd

あなたがやりたいことはexec rm /path/to/shell/script
osvein
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.