Terminalde bir komut açan ve yürüten bir .desktop dosyası oluşturun


39

ExecYeni bir terminal açmak ve içinde bir kabuk betiğini çalıştırmak için bir .desktop dosyasının komutunu nasıl yazacağımı bilmek istiyorum . Kabuk betiği çalışıyor ve tüm kullanıcılar tarafından erişilebilir durumda. Komut dosyasını terminalden başlatırken her şey çalışır, ancak komut dosyasını bir .desktop dosyasından başlatmaya çalışırken olmaz.

İşte zaten denediğim kombinasyonlardan bazıları:

Exec=gnome-terminal -x sh -c 'echo hello'
Exec=sh -c 'gnome-terminal echo hello'
Exec=sh -c 'echo hello'
Exec=echo hello

.Desktop terminali seçeneği true olarak ayarlanmıştır.

Yanıtlar:


46

Masaüstü dosyanızın içeriği şu şekilde görünmelidir (bkz. Bir metin düzenleyici kullanarak .desktop dosyası oluşturma ):

[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;

Veya:

[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;

İlk durumda, Terminalalan false(belki de beklentilerinizin aksine) olarak ayarlanır ve ikinci durumda da ayarlanır true, ancak sonuç her iki durumda da aynıdır.


1
İlk çözüm benim için çalışıyor, ben de buna sadık. Neden $ SHELL olması gerektiğini biliyor musun?
Paradiesstaub

1
@Thibaut Evet, elbette .
Radu Rădeanu

Benim için işe yaradı, ancak sudo ile bir komut başlatmak istiyorum, ardından başlatıcısı kullanıldığında parola soran terminali açıyor. Bir komutu nasıl başlatırım ve bu davranışı nasıl önlerim?
E_Angel

1
@EliasAlves Biraz geç, ancak bunu okuyan başkaları için: Kendinizi doğrulamak için gerek duymadan root ayrıcalıkları gerektiren komutları çalıştırmayı bekleyemezsiniz. (Sisteminizi bunu yapmak için açıkça yapılandırmazsanız, ki bu genellikle kötü bir fikirdir.)
code_dredd

Sanırım soru şudur: terminalin göründüğünden nasıl emin olunur ki, terminal kaybolmaz, böylece kimlik bilgilerini girebiliriz
RockScience

2
!#/bin/bash

gnome-terminal -e YOUR_COMMANDS

Yukarıdaki dosyayı hazırla. Unutmasudo chmod +x filename.sh


1
Bu çözümle ilgili sorun, terminalin derhal kaybolması ve kullanıcının bir şey girememesidir.
Paradiesstaub

Ne dediğini unuttum ama terminali devam ettirmek için bir seçenek olduğunu düşünüyorum. Olabilirhold
Mr.Lee

2

Basitçe ekleyin

;$SHELL 

emirlerin sonunda.

Benim için snapdolduğu gibi, neredeyse gece çalıştığımda, anlık görüntüleri yenilemek için tam bant genişliği kullanan bir şey değil.

Bu da benim için bir .shdosyaya bağlı bir dosya oluşturmam için çalıştı .desktop. Dosya
içeriği.sh

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

-S.shDosyanın ilk satırında doğrudan parola girmeden çalıştır komutuna göndermek STDINPUTiçin kullanılır sudo.

.desktopDosyanın içeriği :

[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;

0

Bunu yapıyorum. Metin dosyasının ilk satırı! # / Bin / bash'dir.

Metin dosyasının sonraki satırları komutlardır (kabuk betiği).

Dosyayı bir şey olarak kaydedin.

Dosyanın özelliklerini açın ve çalışma dosyasını bir program olarak etkinleştirin.

Şimdi, dosya çift tıklandığında, çalıştırma seçeneğini elde ediyorum.


2
Aynı burada, terminal hemen kaybolur.
Paradiesstaub

Benim için sorun yok. Kabuk betiğini oluşturun, ilk satır olarak! # / Bin / bash satırını ekleyin. Dosyanın çalıştırılabilir olarak çalıştırılmasına izin verin. Çift tıklayın ve terminalde çalışmayı seçin. Sadece işe yarıyor.
hatterman

1
Kabuk betiği bittiği için terminalin kapanmayacağından emin misiniz? Senaryonuzun başlangıcında uyku 30 koydu, terminal 30 saniye açık kalır mı?
hatterman
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.