Bir komut dosyasını o komut dosyasından kaldırmak güvenli mi?


9

Senaryom olduğunu hayal et foo. Kullanıcı oturum açtığında bir kez çalıştırılmalıdır ve başarılı bir çalıştırmadan sonra gerekli değildir.

Benim sorum: Komut dosyası dosyasını komut dosyasının içinden kaldırmak güvenli mi?

Örneğin:

#!/bin/bash

# do something
...

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

2
Tamamen ilgisiz değil, #!/bin/bash -eyalnızca yanlış bir şey olmadığında komut dosyasının kaldırılmasını sağlamak için kullanabilirsiniz .
sr_

3
Evet, güvende. Nedenini bilmek istiyorsanız, stackoverflow.com/questions/2028874/…
jofel

2
@jofel Kulağa hoş geliyor, bunu cevaplamanızı öneririm. :-)
htorque

Şüpheniz varsa, son iki satırı ile değiştirebilirsiniz exec rm /path/to/foo.
kasperd

Yanıtlar:


5

Kabuk dosyasını çalıştırırken kaldırmak güvenlidir, çünkü dosya işleyicileri karşılık gelen dosyayı (yeniden) taşımaktan etkilenmez.

Daha fazla bilgi için buraya bakın .


2
Sadece sisteminize bağlı olarak çalışmayabileceğini unutmayın (yani rm <it-self>HP-
Ux'te

1
@Ouki, neden? Bu POSIX'i ihlal etmez mi?
maxschlepzig

3
@maxschlepzig POSIX, yürütülmekte olan bir yürütülebilir dosyanın son bağlantısının silinmesine izin verir: unlinkbaşarısız olabilir ETXTBUSY. (Garip bir şekilde, “saf prosedür” ve “paylaşılan metin” spesifikasyonda tanımlanmamıştır; AFAIK, yürütülebilir bir programın bir bileşeni anlamına gelir: yürütülebilir dosyanın kendisi veya kullandığı bir kütüphane). HP-UX dışındaki tüm büyük birleştirmeler, yürütülebilir dosyaların yeniden adlandırılmasına ve bağlantısının kaldırılmasına izin verir.
Gilles 'SO- kötü olmayı bırak'

2
@Ouki Sadece betiği sonlandırarak dolaşmak kolay olmalı exec rm /path/to/foo.
kasperd

0

Bu konuda hep gergindim, bu yüzden yaptım:

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

Alternatif olarak geçici bir komut dosyasına zincirleme yapabilirsiniz:

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

1
Önerilen yaklaşımlarınızın her ikisinde de, komut dosyasını silindiği zaman yürütmeyi bitirmemiş bir kabuk işlemi olacaktır.
kasperd

Ne yapmak istiyorsunexec rm /path/to/shell/script
osvein
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.