อะไรคือข้อแตกต่างระหว่างตัวเลือก -e และ -x สำหรับ gnome-terminal


11

สถานะ Man pages:

-e, --command=STRING
Execute the argument to this option inside the terminal.
-x, --execute
Execute the remainder of the command line inside the terminal.

"command line" ในตัวอย่างที่สองอ้างถึงคืออะไร? และ "ส่วนที่เหลือ" ของมันคืออะไร? คุณช่วยยกตัวอย่างที่ตัวเลือกทั้งสองนี้ต่างกันได้ไหม? หรือพวกเขาโดยทั่วไปเหมือนกัน?


1
ไม่แน่นอน แต่พบนี้superuser.com/questions/198015/...
rɑːdʒɑ

คำถามแรกที่ดี
Jared Smith

คำตอบ:


16

พิจารณา:

gnome-terminal -x sleep 10m --version
gnome-terminal -e 'sleep 10m' --version

ในตัวอย่างแรกทุกอย่างหลังจากที่-xใช้สำหรับคำสั่งที่จะดำเนินการ ดังนั้นเทอร์มินัล GNOME จะทำงานsleep 10m --versionเป็นคำสั่ง --versionในกรณีนี้จะกลายเป็นส่วนหนึ่งของคำสั่งที่เรียกใช้โดย GNOME Terminal

ในครั้งที่สองเพียงอาร์กิวเมนต์สตริงเดียวที่-eจะใช้เป็นคำสั่งไม่มีอะไรอื่น ดังนั้น--versionนี่คือตัวเลือกของเทอร์มินัล GNOME

ครั้งแรกจะมีประโยชน์มากขึ้นถ้าคุณต้องการเรียกใช้คำสั่งกลุ่ม:

gnome-terminal -x bash -c 'command 1; command 2; ...'

นี่เป็นเรื่องยากที่จะทำ-eเพราะคำสั่งทั้งหมดจะต้องเป็นสตริงเดี่ยวดังนั้นคุณจะต้องพูดถึงสิ่งทั้งหมด ในทางกลับกันหมายความว่าคุณจะต้องระมัดระวังมากขึ้นของราคาและการขยายตัวของตัวแปรและเช่น:

gnome-terminal -e "bash -c 'command 1 $foo; command 2; ...'"

ที่นี่$fooจะถูกขยายโดยเชลล์ปัจจุบัน

gnome-terminal -e 'bash -c "command 1 | awk '\''{print $NF}'\''"' 

การใช้'ภายในสตริงคำสั่งเกี่ยวข้องกับการจัดการคำพูดที่น่ารำคาญ


5
ฉันเห็นแล้ว ดูเหมือนว่าตัวเลือก -x อาจถูกประดิษฐ์ขึ้นเป็นวิธีที่สะดวกในการหลีกเลี่ยงปัญหาเกี่ยวกับคำพูด
stackzebra
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.