ฉันพยายามดูจำนวนไฟล์ใน/tmp/ไดเรกทอรีของฉัน สำหรับสิ่งนี้ฉันคิดว่าคำสั่งนี้จะทำงาน:
watch sh -c 'ls /tmp/|wc -l'
แต่ดูเหมือนว่าจะทำงานเหมือนlsไม่มีข้อโต้แย้ง คือผมอยู่ในและฉันได้รับจำนวนไฟล์ที่มีแทน~ /tmp/ฉันพบวิธีแก้ปัญหาซึ่งดูเหมือนจะทำงานได้:
watch sh -c 'ls\ /tmp/|wc -l'
แต่ทำไมฉันต้องหลบหนีช่องว่างระหว่างlsและ/tmp/? คำสั่งถูกแปลงโดยwatchเพื่อให้lsเอาต์พุตถูกป้อนเข้าwcแต่/tmp/ไม่ถูกส่งผ่านเป็นอาร์กิวเมนต์ไปยังls?
watchอย่างไม่ถูกต้องคำสั่งที่คุณส่งไปwatchนั้นจะถูกป้อนwatchไปยังsh -cดังนั้นคุณจึงมีผลในการทำsh -cสองครั้ง
/tmpเป็นอาร์กิวเมนต์ในกรณีที่ไม่ได้เป็นอาร์กิวเมนต์sh ls
watch "sh -c 'ls /tmp | wc -l'"การทำคำสั่งนี้ควรจะได้รับผลกระทบที่ต้องการ นี่ไม่ใช่ความผิดลองsh -c ls /tmpและคุณจะได้รับไดเรกทอรีบ้านของคุณ (แต่ฉันไม่รู้ว่าทำไม ... )