การลบไฟล์สคริปต์ออกจากภายในสคริปต์นั้นปลอดภัยหรือไม่


9

fooลองนึกภาพผมมีสคริปต์ ควรรันครั้งเดียวเมื่อผู้ใช้ลงชื่อเข้าใช้และไม่จำเป็นหลังจากเรียกใช้สำเร็จ

คำถามของฉัน: ปลอดภัยไหมที่จะลบไฟล์สคริปต์ออกจากภายในสคริปต์?

เช่น:

#!/bin/bash

# do something
...

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

2
ไม่เกี่ยวข้องทั้งหมดคุณสามารถใช้#!/bin/bash -eเพื่อให้แน่ใจว่าไฟล์สคริปต์ถูกลบออกเฉพาะในกรณีที่ไม่มีอะไรผิดปกติ
sr_

3
ใช่มันปลอดภัย หากคุณต้องการทราบสาเหตุอ่านstackoverflow.com/questions/2028874/…
jofel

2
@jofel ฟังดูดีฉันขอแนะนำให้คุณตอบคำถามนี้ :-)
htorque

exec rm /path/to/fooหากมีข้อสงสัยคุณสามารถแทนที่ทั้งสองบรรทัดสุดท้ายด้วย
kasperd

คำตอบ:


5

การลบไฟล์เชลล์ในขณะที่รันอยู่นั้นปลอดภัยเนื่องจากตัวจัดการไฟล์ไม่ได้รับผลกระทบจากการย้ายไฟล์ที่เกี่ยวข้อง

สำหรับข้อมูลเพิ่มเติมโปรดดูที่นี่


2
เพิ่งทราบว่ามันอาจไม่ทำงานขึ้นอยู่กับระบบของคุณ (เช่นrm <it-self>จะไม่ประสบความสำเร็จใน HP-Ux
Ouki

1
@Ouki ทำไม? สิ่งนั้นจะไม่เป็นการละเมิด POSIX หรือไม่
maxschlepzig

3
@maxschlepzig POSIX ช่วยให้การลบของการเชื่อมโยงสุดท้ายที่จะปฏิบัติการที่กำลังมีการดำเนินการเพื่อล้มเหลวนี้อาจล้มเหลวด้วยunlink ETXTBUSY(ผิดปกติ“ ขั้นตอนบริสุทธิ์” และ“ ข้อความที่ใช้ร่วมกัน” ไม่ได้ถูกกำหนดไว้ในข้อมูลจำเพาะ AFAIK หมายถึงองค์ประกอบของโปรแกรมที่ปฏิบัติการได้: ตัวปฏิบัติการเองหรือไลบรารีที่ใช้) Unices ที่สำคัญทั้งหมดนอกเหนือจาก HP-UX อนุญาตให้เปลี่ยนชื่อไฟล์ executables และยกเลิกการเชื่อมโยงได้
Gilles 'หยุดความชั่วร้าย'

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.