ฉันจะเปลี่ยน umask สำหรับคำสั่งเดียวเท่านั้นได้อย่างไร


15

ฉันจะรันคำสั่งแบบโต้ตอบใน Linux (zsh หากมีความสำคัญ) ด้วย umask ที่แตกต่างจากค่าเริ่มต้นสำหรับคำสั่งเดียวเท่านั้นได้อย่างไร บางทีการรวมคำสั่งเข้าด้วยกันในบรรทัดเดียว? umask ใหม่ควรใช้กับคำสั่งนั้นและกลับสู่ค่าเริ่มต้นสำหรับคำสั่งถัดไปที่ป้อน

โดยหลักการแล้วคำสั่งจะไม่เชื่อในการบังคับ umask เริ่มต้นก่อนที่จะป้อน (กล่าวอีกนัยหนึ่ง umask เริ่มต้นไม่จำเป็นต้องระบุ)

คำตอบ:


19

เริ่มsubshell :

(umask 22 && cmd)

จากนั้นใหม่umaskจะเปลี่ยนเฉพาะ subshell นั้น

โปรดทราบว่าzshดำเนินการคำสั่งสุดท้ายของ subshell ในกระบวนการ subshell แทน forking อันอื่นซึ่งหมายความว่าหากคำสั่งนั้นอยู่ภายนอกคุณไม่ได้สูญเสียกระบวนการมันเป็นเพียงการแยกส้อมก่อนหน้านี้ (ดังนั้นจึงumaskเสร็จสิ้น ในกระบวนการลูกที่จะดำเนินการตามคำสั่งของคุณในภายหลัง)


2

คุณสามารถหุ้มมันในเชลล์สคริปต์ umask สืบทอดกระบวนการลูกทั้งหมด

cmd.sh:

umask 0022
cmd

หรือถ้าคุณต้องการที่จะทำมันในหนึ่งบรรทัดคำสั่งคุณสามารถเรียกเปลือกเช่นนี้ "$ (umask 0022; cmd)"
Rob Bos

1
ฉันสับสน$ (กับความคิดเห็นของคุณตอนนี้ผมเข้าใจ$( ( umask 0022; cmd )
donothingsuccessfully

อ๊ะอย่างน้อยก็มีคนชี้แจงว่า ^^
Rob Bos
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.