ターミナルでコマンドを開いて実行する.desktopファイルを作成します

Mar 20 2014

Exec.desktopファイルのコマンドを記述して、新しいターミナルを開き、その中でシェルスクリプトを実行する方法を知りたいです。シェルスクリプトは機能しており、すべてのユーザーがアクセスできます。ターミナルからスクリプトを起動すると、すべてが機能しますが、.desktopファイルからスクリプトを起動しようとすると機能しません。

これが私がすでに試したいくつかの組み合わせです:

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

.desktopターミナルオプションがtrueに設定されています。

回答

52 RaduRădeanu Mar 21 2014 at 02:11

デスクトップファイルの内容は次のようになります(テキストエディタを使用して.desktopファイルを作成する方法を参照してください)。

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

または:

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

最初のケースでは、Terminalフィールドはfalse(おそらくあなたの期待に反して)に設定されtrue、2番目のケースではに設定されますが、結果はどちらの場合も同じです。

3 user225 Mar 18 2019 at 02:54

追加するだけです

;$SHELL 

コマンドの最後に。

私のように、snapdほとんど夜に仕事をしているときはいつでも、システムの全帯域幅を使用してスナップを更新するようなものではありません。

だから、これは私が.shファイルにリンクされた.desktopファイルを作成するために働いた。ファイルの
内容.sh

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

-S.shファイルの最初の行は、パスワードを入力せずに直接実行することを意味STDINPUTするsudoコマンドに送信するために使用されます。

.desktopファイルの内容は次のとおりです。

[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

上記のファイルを作成します。することを忘れないでくださいsudo chmod +x filename.sh

hatterman Mar 20 2014 at 21:05

私はこれをします。テキストファイルの最初の行は!#/ bin / bashです。

テキストファイルの後続の行はコマンド(シェルスクリプト)です。

ファイルをsomething.shとして保存します

ファイルのプロパティを開き、実行ファイルをプログラムとして有効にします。

これで、ファイルをダブルクリックすると、実行するオプションが表示されます。

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

で述べたようにデスクトップエントリ仕様、Terminal=trueターミナルウィンドウでスクリプトを起動するランチャーを伝えます。選択するターミナルエミュレータは、デフォルトのアプリケーション設定とデスクトップ環境によって異なります。GNOMEではgnome-terminalであり、KDEではKonsoleです。(DEがない場合、プレーンWMではxdg-openにバグがあり、Terminal=true無視されます。問題を参照してください)

スクリプトを実行し、その後にシェルを起動するには、この行が必要です。

Exec=sh -c 'echo hello; $SHELL'
  1. sh -c 'COMMAND'COMMANDを実行する$ PATHにある「sh」バイナリを実行します(多くのシステムでshは、へのシンボリックリンクbashですが、移植性のために「sh」が推奨されます)
  2. echo hello; $SHELL2つのことをします。最初に実行されecho hello、次にこのコマンドの実行後、$ SHELLを起動します。

終了するのを待つコマンドを追加しない場合、ターミナルエミュレータはプログラムを実行して終了します。


PSターミナルを閉じたくない場合は、次のことができます。

Exec=sh -c 'echo hello; read'

または

Exec=sh -c 'echo hello; sleep 5'

(読み取りはEnterキーを押すのを待ち、スリープは5秒待ちます)

PPSは、$SHELLおそらく/etc/passwdユーザーに合わせて最後のセクションと同じになります。

$ man login

$ HOMEの値、 $USER, $シェル、 $PATH, $LOGNAMEと$ MAILは、パスワードエントリの適切なフィールドに応じて設定されます。