การดำเนินการคำสั่ง if จากพรอมต์คำสั่ง


19

ในทุบตีฉันสามารถทำต่อไปนี้:

if [ -f /tmp/test.txt ]; then echo "true"; fi

อย่างไรก็ตามหากฉันเพิ่มsudoไว้ด้านหน้ามันจะไม่ทำงานอีกต่อไป:

sudo if [ -f /tmp/test.txt ]; then echo "true"; fi
-bash: syntax error near unexpected token `then'

ฉันจะทำให้มันทำงานได้อย่างไร



มันคือการปฏิบัติที่ดีกว่าที่จะsudoเพียงtestและ / echoหรือเพียง ไม่ใช่ifคำสั่งทั้งหมด
jippie

คุณหมายถึงif sudo testอะไร ใช่ว่าจะดีกว่า ฉันไม่สามารถใช้testหากไม่มีifเพราะมันตั้งค่ารหัสการออกเป็นอย่างอื่น
m33lky

คำตอบ:


14

sudoเรียกใช้อาร์กิวเมนต์โดยใช้execไม่ใช่ผ่านตัวแปลเชลล์ ดังนั้นมันจึงถูก จำกัด ให้โปรแกรมไบนารีจริงและไม่สามารถใช้ฟังก์ชันเชลล์, นามแฝง, หรือบิวอิน ( ifเป็นบิวอิน) โปรดทราบว่า-iและ-sสามารถใช้ตัวเลือกเพื่อเรียกใช้งานคำสั่งที่กำหนดในการเข้าสู่ระบบหรือไม่ใช่การเข้าสู่ระบบเปลือกตามลำดับ (หรือเพียงแค่เปลือกโต้ตอบโต้ตอบโปรดทราบว่าคุณจะต้องหลบหนีอัฒภาคหรืออ้างคำสั่ง)

$ sudo if [ -n x ]; then echo y; fi
-bash: syntax error near unexpected token `then'
$ sudo if [ -n x ]\; then echo y\; fi
sudo: if: command not found
$ sudo -i if [ -n x ]\; then echo y\; fi
y
$ sudo -s 'if [ -n x ]; then echo y; fi'
y

ดังนั้นถ้าฉันใช้-iหรือ-sคำสั่ง if จะได้รับการประเมินอย่างเหมาะสมหรือไม่
m33lky

1
ใช่ตราบใดที่คำพูดหรือการหลบหนีถูกต้อง ดูการแก้ไขของฉัน
Kevin

9

ลองโทรสายเป็นอาร์กิวเมนต์สตริงผ่านเชลล์

sudo /bin/sh -c 'if [ -f /tmp/test.txt ]; then echo "true"; fi'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.