Sự khác biệt giữa các tùy chọn -e và -x cho gnome-terminal là gì?


11

Man trang trạng thái:

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

"Dòng lệnh" trong ví dụ thứ hai đề cập đến là gì? Và "phần còn lại" của nó là gì? Bạn có thể vui lòng cho một ví dụ trong đó hai tùy chọn khác nhau? Hay về cơ bản chúng giống nhau?


1
Không chính xác nhưng đã tìm thấy superuser.com/questions/198015/
Lần

Câu hỏi đầu tiên tuyệt vời.
Jared Smith

Câu trả lời:


16

Xem xét:

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

Trong ví dụ đầu tiên, mọi thứ sau -xđược sử dụng để lệnh được thực thi. Vì vậy, Terminal Gnome sẽ chạy sleep 10m --versionnhư lệnh. --versiontrong trường hợp này trở thành một phần của lệnh được chạy bởi Gnome Terminal.

Trong lần thứ hai, chỉ có đối số chuỗi đơn -eđược sử dụng làm lệnh, không có gì khác. Vì vậy, --versionđây thực sự là một tùy chọn cho Gnome Terminal.

Đầu tiên có thể hữu ích hơn nếu bạn muốn chạy một chuỗi các lệnh:

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

Điều này rất khó thực hiện -e, vì toàn bộ lệnh cần phải là một chuỗi, vì vậy bạn sẽ phải trích dẫn toàn bộ. Đến lượt điều này có nghĩa là bạn cần cẩn thận hơn đối với các trích dẫn và mở rộng biến và như vậy:

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

Ở đây, $foosẽ được mở rộng bởi vỏ hiện tại.

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

Sử dụng 'bên trong chuỗi lệnh liên quan đến việc xử lý trích dẫn gây phiền nhiễu.


5
Tôi thấy bây giờ Có vẻ như tùy chọn -x có thể được phát minh như một cách thuận tiện để tránh các vấn đề với dấu ngoặc kép.
stackzebra
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.