데스크탑 파일이 $ PATH를 올바르게 사용하지 않는 것 같습니다


13

.desktopUnity Launcher에서 사용할 파일을 만들고 있습니다.

필자는 홈 디렉토리에 관련 우분투 문서에 지정된대로 내 파일의 환경 변수에 ~/usr/bin/올바르게 추가 된 실행 파일 ( )을 넣는 자신의 위치를 ​​가지고 있습니다 .PATH.pam_environment

이것은 내 .pam_environment파일 의 내용입니다 .

LANGUAGE=en_AU:en_GB:en
LANG=en_AU.UTF-8
LC_NUMERIC=en_AU.UTF-8
LC_TIME=en_AU.UTF-8
LC_MONETARY=en_AU.UTF-8
LC_PAPER=en_AU.UTF-8
LC_NAME=en_AU.UTF-8
LC_ADDRESS=en_AU.UTF-8
LC_TELEPHONE=en_AU.UTF-8
LC_MEASUREMENT=en_AU.UTF-8
LC_IDENTIFICATION=en_AU.UTF-8

PATH DEFAULT=${PATH}:~/usr/bin/

내 PATH변수는 다음과 같습니다.

ben@ben-HPdv6:~$ echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:~/usr/bin/:~/usr/bin/

나는 그것이 두 번 추가된다는 것을 알고 있지만, .pam_environment내가 참조 한 Ubuntu Documentation에서 권장되는 올바른 구문을 사용할 때 파일의 내용이 두 번 추가되는 것처럼 보입니다.

이것은 문제의 한 예입니다 (모든 경우에 발생 함). Eclipse IDE를 실행 하는 스크립트 ( eclipse)가 ~/usr/bin/있습니다.

터미널을 열고 간단히 입력 eclipse하면 예상대로 정상적으로 실행됩니다.

그러나 다음 .desktop파일을 사용하는 경우 :

#!/usr/bin/env xdg-open

[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Name=Eclipse - Juno (4.2)
Icon=/home/ben/.icons/eclipse.svg
Exec=eclipse

오류가 발생합니다. 오류

그러나 내가 Exec=줄을 바꿀 때 :

Exec=/home/ben/usr/bin/eclipse

완벽하게 작동합니다.

공식 유니티 발사기 및 데스크톱 파일 문서는 이 일을해야한다고 제안한다 :

Exec은 실행 파일의 경로입니다. 실행 파일의 전체 경로는 $ PATH 변수에 지정된 경로에없는 경우에만 사용해야합니다. 예를 들어, / usr / bin 경로에있는 파일은 Exec 필드에 전체 경로를 지정할 필요는 없지만 파일 이름 만 있으면됩니다.

무슨 일이 일어나고 있는지에 대한 제안?


쉘에서 일식을 즐기도록 데스크탑 파일을 수정하면 작동 할 수 있습니다. 얼마 전에 휴대용 사용을 중단 한 이후로 말할 수 없었습니다.
— RobotHumans 5

답변:


5

물결표는 .pam_environment프로파일 스크립트에서와 같이 확장되지 않으며 데스크탑 파일은 쉘 Exec과 같은 방식으로 줄에서 쉘 확장을 수행하지 않으므로 문자 그대로라는 파일을 찾고 ~/usr/bin/eclipse있습니다. 존재하지 않습니다.

PATH 지정의 물결표를 $ {HOME}으로 바꾸면 작동하는 것 같습니다.


당신의 대답은 정확하며 문제를 완전히 해결합니다. 감사! 다른 질문을하는 것을 막기 위해 왜 $PATH두 번 추가하는 것이 좋은지 아십니까?
— BT

1
그것은 버그입니다 : pad.lv/955032
— cscarney

3

Ubuntu 문서에 언급 된 내용은 의미가 있지만 "더 이상 권장하지 않음"섹션에는 세부 정보가 부족합니다. 따라서 제 답변에는 이러한 방법 중 하나를 사용하는 것이 포함됩니다. 또한 이미 동일한 목적으로 사용되고 있습니다.

./.profile 파일을 빠르게 방문하십시오.

광산에는 다음이 포함됩니다.

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

이 파일의 마지막 섹션에서 볼 수 있듯이 (# set PATH 아래에 사용자 개인 저장소가있는 경우 PATH 아래에 표시됨) 이미 완료된 것입니다. 따라서 $ PATH 변수에 무언가를 추가하려면 동일한 작업을 수행하면됩니다. 문서는 시스템이 시작될 때마다 실행될 것이라고 언급했습니다.

귀하의 경우에는 다음을 추가하기 만하면됩니다.

# set PATH to custom variable (this line is not needed)
if [ -d "$HOME/usr/bin" ]; then
    PATH="$HOME/usr/bin:$PATH"
fi

이 시점에서이 방법이 더 이상 권장되지 않는 유일한 이유는 시작시 스크립팅과 관련이 있기 때문에 약간의 실수에 매우 민감하다고 생각하기 시작했습니다. 그러나 누군가 이와 같은 작업을하는 경우 파일을 원래 상태로 다시 변경하면 작은 실수를 취소 할 수 있습니다.

이 작업을 수행하는 방법을 잘 모를 경우 :

1) 먼저 CTRL + ALT + F3을 누릅니다.

2) 화면의 지시에 따라 로그인하십시오

3) 이것을 명령 프롬프트에 입력하십시오.

/usr/bin/nano ./.profile

4)이 줄을 제거하십시오 : (방금 추가했습니다)

# set PATH to custom variable (this line is not needed)
if [ -d "$HOME/usr/bin" ]; then
    PATH="$HOME/usr/bin:$PATH"
fi

5) CTRL + O를 누릅니다 (Out에서와 같이).

6) Ctrl + X를 누릅니다 (eXit에서와 같이)

7) 입력 exit하고 Enter 키를 누릅니다 (때로는 RETURN).

8) 이제 CTRL + ALT + F7을 누릅니다.

9) 문제가 발생한시기에 따라 로그인 화면이나 데스크탑이 나타납니다. 그렇지 않은 경우 CTRL + ALT + DEL (때로는 CTRL + ALT + DELETE)을 누르면 시스템이 안전하게 다시 시작됩니다.

도움이 되었기를 바랍니다!


두 솔루션 모두 문제를 해결하는 데 도움이되므로 감사합니다. :) 두 가지를 모두 찬성했지만 @csarney는 문제의 정확한 이유를 설명하고 설명서에서 권장하는 환경 변수 설정 방법을 사용하므로 솔루션으로 표시했습니다.
— BT
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.