Buat file .desktop yang membuka dan menjalankan perintah di terminal
Saya ingin tahu cara menulis Exec
perintah dari file .desktop untuk membuka terminal baru dan menjalankan skrip shell di dalamnya. Skrip shell berfungsi dan dapat diakses oleh semua pengguna. Saat meluncurkan skrip dari terminal semuanya berfungsi, tetapi tidak ketika mencoba meluncurkan skrip dari file .desktop.
Berikut beberapa kombinasi yang sudah saya coba:
Exec=gnome-terminal -x sh -c 'echo hello'
Exec=sh -c 'gnome-terminal echo hello'
Exec=sh -c 'echo hello'
Exec=echo hello
Opsi terminal .desktop disetel ke true.
Jawaban
Konten file desktop Anda akan terlihat seperti ini (lihat cara membuat file .desktop menggunakan editor teks ):
[Desktop Entry]
Version=1.0
Name=Test
Comment=Test the terminal running a command inside it
Exec=gnome-terminal -e "bash -c 'echo hello;$SHELL'"
Icon=utilities-terminal
Terminal=false
Type=Application
Categories=Application;
Atau:
[Desktop Entry]
Version=1.0
Name=Test
Comment=Test the terminal running a command inside it
Exec=bash -c 'echo hello;$SHELL'
Icon=utilities-terminal
Terminal=true
Type=Application
Categories=Application;
Dalam kasus pertama, Terminal
bidang disetel ke false
(mungkin bertentangan dengan harapan Anda) dan di kasus kedua disetel ke true
, tetapi hasilnya sama di kedua kasus.
Cukup tambahkan
;$SHELL
di akhir perintah Anda.
Bagi saya snapd
bukanlah sesuatu yang menggunakan sistem bandwidth penuh untuk menyegarkan foto kapan saja hampir saya bekerja di malam hari.
Jadi ini berhasil bagi saya untuk membuat .sh
file yang ditautkan ke .desktop
file.
Isi .sh
file adalah
echo <your password> | sudo -S systemctl stop snapd.service
sudo systemctl disable snapd.service;$SHELL
-S
di baris pertama .sh
file digunakan untuk mengirim STDINPUT
ke sudo
perintah yang berarti langsung dieksekusi tanpa memasukkan kata sandi.
Isi dari .desktop
file tersebut adalah:
[Desktop Entry]
Version=1.0
Name=Test
Comment=Test the terminal running a command inside it
Exec=gnome-terminal -e "/scripts/disable_snap.sh"
Icon=terminal
Terminal=true
Type=Application
Categories=Application;
!#/bin/bash
gnome-terminal -e YOUR_COMMANDS
Buatlah file di atas. Jangan lupasudo chmod +x filename.sh
Saya melakukan ini. Baris pertama file teks adalah! # / Bin / bash
Baris berikutnya dari file teks adalah perintah (skrip shell).
Simpan file sebagai sesuatu.sh
Buka properti file dan aktifkan run file sebagai program.
Sekarang, ketika file diklik dua kali, saya mendapatkan opsi untuk menjalankannya.
TL; DR
[Desktop Entry]
Version=1.0
Name=Hello
Exec=sh -c 'echo hello; $SHELL'
Icon=utilities-terminal
Terminal=true
Type=Application
Seperti yang dinyatakan dalam spesifikasi entri desktop , Terminal=true
beri tahu peluncur untuk meluncurkan skrip Anda di jendela terminal. Emulator Terminal yang dipilih bergantung pada pengaturan aplikasi default dan Lingkungan Desktop Anda. Di GNOME, ini adalah gnome-terminal, di KDE, ini adalah Konsole. (Tanpa DE, di WM biasa ada bug di xdg-open, dan Terminal=true
diabaikan saja, lihat masalah )
Anda membutuhkan baris ini untuk menjalankan skrip Anda dan meluncurkan shell setelahnya.
Exec=sh -c 'echo hello; $SHELL'
sh -c 'COMMAND'
jalankan biner "sh" yang ditemukan di $ PATH yang mengeksekusi COMMAND (pada banyak sistem,sh
merupakan tautan simbolis kebash
, tetapi untuk portabilitas "sh" lebih disukai)echo hello; $SHELL
melakukan dua hal. Pertama, ini berjalanecho hello
dan kemudian, setelah eksekusi perintah ini, meluncurkan $ SHELL.
Jika Anda tidak menambahkan beberapa perintah yang menunggu Anda keluar, emulator terminal hanya akan menjalankan program Anda dan keluar .
PS Jika Anda hanya ingin tidak menutup terminal Anda, Anda dapat melakukannya
Exec=sh -c 'echo hello; read'
Atau
Exec=sh -c 'echo hello; sleep 5'
(baca akan menunggu Anda untuk menekan Enter, tidur hanya akan menunggu 5 detik)
PPS $SHELL
mungkin akan sama dengan bagian terakhir yang /etc/passwd
sejalan dengan pengguna Anda.
$ man login
Nilai untuk $ HOME, $USER, $KULIT, $PATH, $LOGNAME, dan $ MAIL disetel sesuai dengan bidang yang sesuai di entri kata sandi.