Apa perbedaan antara opsi -e dan -x untuk gnome-terminal?

11

Halaman manual menyatakan:

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

Apa yang dimaksud dengan "baris perintah" dalam contoh kedua yang merujuk? Dan apa "sisa" nya? Bisakah Anda memberi contoh di mana dua opsi ini berbeda? Atau apakah mereka pada dasarnya sama?

stackzebra
sumber
1
Tidak persis tetapi menemukan superuser.com/questions/198015/…
r 6dʒɑ
Pertanyaan pertama yang bagus.
Jared Smith

Jawaban:

16

Mempertimbangkan:

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

Dalam contoh pertama, semuanya setelah -xitu digunakan untuk perintah yang akan dieksekusi. Jadi Terminal GNOME akan berjalan sleep 10m --versionsebagai perintah. --versiondalam hal ini menjadi bagian dari perintah yang akan dijalankan oleh Terminal GNOME.

Dalam yang kedua, hanya argumen string tunggal -eyang digunakan sebagai perintah, tidak ada yang lain. Jadi di --versionsini sebenarnya adalah opsi untuk Terminal GNOME.

Yang pertama bisa lebih berguna jika Anda ingin menjalankan serangkaian perintah:

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

Ini sulit dilakukan -e, karena seluruh perintah harus berupa string tunggal, jadi Anda harus mengutip semuanya. Ini pada gilirannya berarti Anda harus lebih berhati-hati terhadap penawaran dan ekspansi variabel dan semacamnya:

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

Di sini, $fooakan diperluas oleh shell saat ini.

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

Menggunakan 'di dalam string perintah melibatkan penanganan kutipan yang mengganggu.

Olorin
sumber
5
Saya mengerti sekarang. Tampaknya opsi -x mungkin diciptakan sebagai cara yang nyaman untuk menghindari masalah dengan tanda kutip.
stackzebra