Apakah aman untuk menghapus file skrip dari dalam skrip itu?


9

Bayangkan saya punya skrip foo. Ini harus dijalankan sekali ketika pengguna login dan tidak diperlukan setelah menjalankan yang sukses.

Pertanyaan saya: Apakah aman untuk menghapus file skrip dari dalam skrip?

Misalnya:

#!/bin/bash

# do something
...

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

2
Tidak sepenuhnya tidak berhubungan, Anda dapat menggunakan #!/bin/bash -euntuk memastikan bahwa file skrip dihapus hanya jika tidak ada yang salah.
sr_

3
Ya, aman. Jika Anda ingin tahu, mengapa, baca stackoverflow.com/questions/2028874/…
jofel

2
@ jofel Kedengarannya bagus, saya sarankan Anda membuat ini jawaban. :-)
htorque

Jika ragu, Anda dapat mengganti dua baris terakhir dengan exec rm /path/to/foo.
kasperd

Jawaban:


5

Aman untuk menghapus file shell saat menjalankannya, karena penangan file tidak terpengaruh oleh (kembali) memindahkan file yang sesuai.

Untuk informasi lebih lanjut, lihat di sini .


2
Perlu diketahui bahwa itu mungkin tidak berfungsi, tergantung pada sistem Anda (yaitu rm <it-self>tidak akan berhasil pada HP-Ux.
Ouki

1
@Ouki, mengapa? Bukankah itu melanggar POSIX?
maxschlepzig

3
@maxschlepzig POSIX memungkinkan penghapusan tautan terakhir ke executable yang saat ini dieksekusi gagal: unlinkmungkin gagal dengan ETXTBUSY. (Anehnya, "prosedur murni" dan "teks bersama" tidak didefinisikan dalam spesifikasi; AFAIK berarti komponen dari program yang dapat dieksekusi: yang dapat dieksekusi itu sendiri atau perpustakaan yang digunakannya). Semua kesatuan utama selain dari HP-UX memungkinkan yang dapat dieksekusi untuk diubah namanya dan dibatalkan tautannya.
Gilles 'SO- stop being evil'

2
@Ouki Itu seharusnya mudah untuk diselesaikan hanya dengan mengakhiri skripnya exec rm /path/to/foo.
kasperd

0

Saya selalu gugup tentang hal ini sehingga saya melakukannya:

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

Sebagai alternatif, Anda dapat berantai ke skrip sementara:

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

1
Di kedua pendekatan yang disarankan Anda masih akan ada proses shell yang belum selesai menjalankan skrip pada saat itu dihapus.
kasperd

Yang ingin Anda lakukan adalahexec rm /path/to/shell/script
osvein
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.