Tập tin máy tính để bàn dường như không sử dụng chính xác $ PATH


13

Tôi đang tạo .desktoptập tin để sử dụng trong Unity Launcher.

Tôi có vị trí riêng trong thư mục nhà của mình, nơi tôi đặt các tệp thực thi ( ~/usr/bin/) được thêm chính xác vào PATHbiến môi trường trong .pam_environmenttệp của mình như được chỉ định trong tài liệu Ubuntu có liên quan .

Đây là nội dung của .pam_environmenttập tin của tôi :

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/

Kết quả là PATHbiến của tôi như sau:

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/

Tôi biết rằng nó được nối thêm hai lần, nhưng mọi thứ trong .pam_environmenttệp dường như được thêm hai lần bất kể khi sử dụng đúng cú pháp được đề xuất trong Tài liệu Ubuntu mà tôi đã tham chiếu.

Đây là một ví dụ về vấn đề (nó xảy ra với tất cả các trường hợp). Tôi có một tập lệnh (được gọi eclipse) trong ~/usr/bin/đó chạy IDE Eclipse.

Tôi có thể mở bất kỳ thiết bị đầu cuối và chỉ cần gõ eclipsevà nó chạy tốt như bạn mong đợi.

Nhưng khi sử dụng .desktoptệp sau :

#!/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

Tôi nhận được lỗi: lỗi

Nhưng khi tôi thay đổi Exec=dòng thành:

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

nó hoạt động hoàn hảo

Các Official Unity Launcher và Desktop file tài liệu cho thấy rằng điều này sẽ làm việc:

Exec là đường dẫn đến tập tin thực thi. Đường dẫn đầy đủ đến tệp thực thi chỉ được sử dụng trong trường hợp không có trong bất kỳ đường dẫn nào được chỉ định trong biến $ PATH. Ví dụ: bất kỳ tệp nào nằm trong đường dẫn / usr / bin không cần phải có đường dẫn đầy đủ được chỉ định trong trường Exec, mà chỉ có tên tệp của chúng.

Bất kỳ đề xuất về những gì đang xảy ra?


Sửa đổi tập tin máy tính để bàn của bạn thành nhật thực thú vị trong một vỏ và nó có thể hoạt động. Tôi không thể nói từ khi tôi ngừng sử dụng xách tay một thời gian trước đây.
RobotHumans

Câu trả lời:


5

Dấu ngã không được mở rộng .pam_environmenttheo cách trong kịch bản hồ sơ và các tệp trên máy tính để bàn không mở rộng vỏ trên các Execdòng của chúng theo cách vỏ, vì vậy, nó tìm kiếm một tệp có tên theo nghĩa đen ~/usr/bin/eclipse, tất nhiên là không ' t tồn tại

Thay thế dấu ngã trong gán PATH bằng $ {HOME} và nó dường như hoạt động.


Câu trả lời của bạn là chính xác, khắc phục vấn đề hoàn toàn. Cảm ơn! Để cứu tôi hỏi một câu hỏi khác, bạn có biết tại sao việc nối lại $PATHxảy ra hai lần không?
BT

1
Đó là một lỗi: pad.lv/955032
cscarney

3

Những gì được nói trên tài liệu Ubuntu có ý nghĩa, tuy nhiên phần "không được đề xuất nữa" của nó thiếu một số chi tiết. Vì lý do đó, câu trả lời của tôi sẽ liên quan đến việc sử dụng một trong những phương pháp này. Ngoài ra: nó đã được sử dụng cho mục đích chính xác này.

Hãy truy cập nhanh vào tệp ./.profile của bạn.

Của tôi chứa điều này:

# ~/.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

Như bạn có thể thấy ở phần cuối của tệp này (các dòng bên dưới # set PATH để nó bao gồm cả thùng riêng của người dùng nếu nó tồn tại), điều này đã được thực hiện. Vì vậy, nếu bạn muốn thêm một cái gì đó vào biến $ PATH, bạn chỉ cần làm điều tương tự. Các tài liệu đã đề cập rằng điều này sẽ được chạy mỗi khi hệ thống được khởi động.

Trong trường hợp của bạn, tất cả những gì bạn cần làm là thêm điều này:

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

Tại thời điểm này, tôi bắt đầu nghĩ rằng lý do duy nhất mà phương pháp này không còn được khuyến khích nữa là nó liên quan đến kịch bản khi khởi động, rất nhạy cảm với những lỗi nhỏ. Tuy nhiên, khi ai đó đang làm việc với một cái gì đó như thế này, một lỗi nhỏ có thể được hoàn tác chỉ bằng cách thay đổi tệp trở lại như cũ.

Nếu bạn không chắc chắn làm thế nào để làm điều này:

1) Trước tiên, nhấn CTRL + ALT + F3

2) Đăng nhập bằng cách làm theo lời nhắc trên màn hình

3) Nhập cái này vào dấu nhắc lệnh:

/usr/bin/nano ./.profile

4) xóa các dòng này: (chúng tôi chỉ cần thêm chúng)

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

5) nhấn CTRL + O (như trong Out)

6) nhấn CTRL + X (như trong eXit)

7) gõ exitvà nhấn ENTER (đôi khi TRẢ LẠI)

8) bây giờ nhấn CTRL + ALT + F7

9) Bạn sẽ nhận được màn hình đăng nhập hoặc máy tính để bàn, tùy thuộc vào thời điểm xảy ra sự cố. Nếu không, nhấn CTRL + ALT + DEL (đôi khi CTRL + ALT + DELETE) và hệ thống của bạn sẽ khởi động lại an toàn.

Hi vọng điêu nay co ich!


Cả hai giải pháp đều hoạt động để khắc phục sự cố, vì vậy cảm ơn :) Tôi đã nâng cấp cả hai bạn nhưng @csarney giải thích lý do chính xác cho sự cố và sử dụng phương pháp cài đặt biến môi trường được đề xuất trong tài liệu, vì vậy tôi đã đánh dấu đó là giải pháp.
BT
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.