Buat file .desktop yang membuka dan menjalankan perintah di terminal

Mar 20 2014

Saya ingin tahu cara menulis Execperintah 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

52 RaduRădeanu Mar 21 2014 at 02:11

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, Terminalbidang disetel ke false(mungkin bertentangan dengan harapan Anda) dan di kasus kedua disetel ke true, tetapi hasilnya sama di kedua kasus.

3 user225 Mar 18 2019 at 02:54

Cukup tambahkan

;$SHELL 

di akhir perintah Anda.

Bagi saya snapdbukanlah sesuatu yang menggunakan sistem bandwidth penuh untuk menyegarkan foto kapan saja hampir saya bekerja di malam hari.

Jadi ini berhasil bagi saya untuk membuat .shfile yang ditautkan ke .desktopfile.
Isi .shfile adalah

echo <your password> | sudo -S systemctl stop snapd.service
sudo systemctl disable snapd.service;$SHELL

-Sdi baris pertama .shfile digunakan untuk mengirim STDINPUTke sudoperintah yang berarti langsung dieksekusi tanpa memasukkan kata sandi.

Isi dari .desktopfile 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;
2 Mr.Lee Mar 20 2014 at 21:10
!#/bin/bash

gnome-terminal -e YOUR_COMMANDS

Buatlah file di atas. Jangan lupasudo chmod +x filename.sh

hatterman Mar 20 2014 at 21:05

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.

JulianCoffee May 23 2020 at 17:59

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=trueberi 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=truediabaikan saja, lihat masalah )

Anda membutuhkan baris ini untuk menjalankan skrip Anda dan meluncurkan shell setelahnya.

Exec=sh -c 'echo hello; $SHELL'
  1. sh -c 'COMMAND'jalankan biner "sh" yang ditemukan di $ PATH yang mengeksekusi COMMAND (pada banyak sistem, shmerupakan tautan simbolis ke bash, tetapi untuk portabilitas "sh" lebih disukai)
  2. echo hello; $SHELLmelakukan dua hal. Pertama, ini berjalan echo hellodan 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 $SHELLmungkin akan sama dengan bagian terakhir yang /etc/passwdsejalan dengan pengguna Anda.

$ man login

Nilai untuk $ HOME, $USER, $KULIT, $PATH, $LOGNAME, dan $ MAIL disetel sesuai dengan bidang yang sesuai di entri kata sandi.