런처에 저장된 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를 통해 "런처"를 만드는 두 가지 방법:

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://

관련 정보