ターミナルでコマンドを開いて実行する.desktopファイルを作成します
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に設定されています。
回答
デスクトップファイルの内容は次のようになります(テキストエディタを使用して.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番目のケースではに設定されますが、結果はどちらの場合も同じです。
追加するだけです
;$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;
!#/bin/bash
gnome-terminal -e YOUR_COMMANDS
上記のファイルを作成します。することを忘れないでくださいsudo chmod +x filename.sh
私はこれをします。テキストファイルの最初の行は!#/ bin / bashです。
テキストファイルの後続の行はコマンド(シェルスクリプト)です。
ファイルをsomething.shとして保存します
ファイルのプロパティを開き、実行ファイルをプログラムとして有効にします。
これで、ファイルをダブルクリックすると、実行するオプションが表示されます。
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'
sh -c 'COMMAND'
COMMANDを実行する$ PATHにある「sh」バイナリを実行します(多くのシステムでsh
は、へのシンボリックリンクbash
ですが、移植性のために「sh」が推奨されます)echo hello; $SHELL
2つのことをします。最初に実行され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は、パスワードエントリの適切なフィールドに応じて設定されます。