데스크탑 파일이 $ 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.