ランチャーに格納されているbashコマンドを使用してLinux Mint LMDE5からランチャーパスを取得するには?

ランチャーに格納されているbashコマンドを使用してLinux Mint LMDE5からランチャーパスを取得するには?

Linux Mint LMDE5はDebianの派生物です。デスクトップでは、GUIを介して何かをリンクするだけでなく、より小さなbashコードを保存することができるランチャーpeを作成できます。作成されたランチャーは別のフォルダに移動できます。

次の.shファイルとランチャーの場所:

/home/user_name/desktop/a/b/c

次のコードを使用すると、実行時にbashファイルのパスを印刷できます。

.shファイルの内容:

#!/bin/bash
script_path=$(dirname "$(readlink -f "$0")")"/"
echo "$script_path"
sleep 100

.shファイル出力:

/home/user_name/desktop/a/b/c

動作しないランチャー「ソリューション」:

ランチャーファイルの内容:

bash -c 'launcher_path=$(dirname "$(readlink -f "$0")")"/"; echo "$launcher_path"; sleep 100'

ターミナルランチャーの出力:

/home/user_name/ # but that should be: /home/user_name/desktop/a/b/c

「ランチャー」とはどういう意味ですか?

これは Linux Mint と LMDE でよく使われる .desktop ファイルです。このファイルは、Windowsの「.lnk」ファイルと構造と操作が似ています。

Linux Mint GUIを介して「ランチャー」を作成する2つの方法:

Launcherコンテンツの例(.desktopファイル):

[Desktop Entry]
Name=test
Exec=bash -c 'xed /home/user/desktop/sample_file.txt'
Comment=
Terminal=true
Icon=cinnamon-panel-launcher
Type=Application
Name[de_DE]=Sample for a launcher file, which open a textfile, which is located on desktop.

コンクリート:

実行プログラムの次のコマンドラインで適切な修正のみを検索してください。

bash -c 'launcher_path=$(dirname "$(readlink -f "$0")")"/"; echo "$launcher_path"; sleep 100'

追加のスクリプトやオペレーティングシステムの修正は見つかりません。

答え1

実行中のスクリプトを含むディレクトリを知りたい場合は、それを使用しないでください。代わりに、スクリプトをシンボリックリンクし、実行可能ファイル(通常はおよび)を含むユーザー所有ディレクトリにファイルbash -cのキーとして使用できます。 Bashを使用しているので、より良い選択肢に置き換えることもできます。 (望むより~/.local/bin~/binExec.desktop$0${BASH_SOURCE[0]}これ回答)

$ pwd
/home/user_name/desktop/a/b/c
$ cat mylauncher.sh
#!/bin/bash
script_path=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")/
echo "$script_path"
$ ./mylauncher.sh
/home/user_name/desktop/a/b/c/

次にシンボリックリンクを追加します~/bin

$ pwd
/home/user_name/desktop/a/b/c
$ mkdir -p ~/bin
$ PATH=$HOME/bin:$PATH
$ ln -rs ./mylauncher.sh ~/bin
$ cd
$ pwd
/home/user_name
$ mylauncher.sh
/home/user_name/desktop/a/b/c/

これでExec=mylauncher.shファイルで利用できるようになります.desktop。一部のシステムにはすでにファイルの~/bin合計チェック機能が含まれています。そうでない場合は、以下を追加できます。~/.local/bin.profile

if [ -d "$HOME/bin" ]; then
    PATH=$HOME/bin:$PATH
fi

if [ -d "$HOME/.local/bin" ]; then
    PATH=$HOME/.local/bin:$PATH
fi

GNUは相対パスを簡単に使用できるオプションをサポートしていますln-rバラよりln(1)


%k別のオプションは、設定の特殊フィールドをパラメータとして使用することですExec。このフィールドは実行可能ファイルの場所に展開されます.desktop。によると参考にしてください。仕様これはURIまたはパスです。

[Desktop Entry]
Version=1.0
Name=Test
Exec=bash -c 'desktop_file=${1#*://}; dir=$(dirname "$(readlink -f "$desktop_file")"); echo "$dir"; sleep 1000' -- %k
Terminal=true
Type=Application

${1#*://}URI%kに拡張されている場合は、プロトコル部分を削除してください。file://

関連情報