Sửa cài đặt đường dẫn trong tệp ~ / .profile


11

Có một dòng trong ~/.profileđó là

PATH="$HOME/bin:$HOME/.local/bin:$PATH"i

Tôi không chắc chắn về điều cuối cùng i.

  • Tôi có nên loại bỏ nó không ??
  • Nó không phải là một lỗi cú pháp ??


4
@dPlay Tôi không chắc đó là bản sao. Tôi đồng ý cả hai là về $PATHbiến môi trường, nhưng chúng không trùng lặp chút nào. Nhiều nhất, chúng có liên quan. Câu hỏi này là một vấn đề trong ~/.profileđó tình cờ là một nhân vật phụ trong dòng nơi $PATHmôi trường được gán.
Dan

@Dan Câu trả lời được bình chọn cao nhất (!) Trong câu hỏi trùng lặp giải thích cách một PATH=dòng trong ~/.profilesẽ trông như thế nào là hợp lệ - đó là câu hỏi thực sự ở đây.
tráng miệng

1
@datcher những gì OP có ở đây là hoàn toàn hợp lệ, đó không phải là vấn đề của định dạng không hợp lệ. Điều này hoạt động, nó không làm gì hữu ích.
terdon

2
Có tôi dùng vi biên tập. Có thể tôi vô tình đặt chữ 'i' trong tập tin như món tráng miệng đã nói. Nhưng sau đó tôi đã phải: wq để làm cho nó hiệu quả. Tôi nghĩ rằng tôi đã không làm điều đó, nhưng xem xét trình độ của tôi, tôi có thể đã làm một số điều ngu ngốc.
Nụ cười

Câu trả lời:


13

Không, đó không phải là lỗi cú pháp; nó chỉ là một chữ cái được thêm vào sau khi mở rộng $PATH, bởi vì trình bao xóa bỏ dấu ngoặc kép ...

$ PATH="$HOME/bin:$HOME/.local/bin:$PATH"i
$ echo $PATH
/home/zanna/bin:/home/zanna/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bini

Vì vậy, cũng như chuẩn bị các thư mục cục bộ, nó đã loại bỏ hiệu quả hiện tại /snap/binkhỏi PATH của tôi và thêm vào các thư mục không tồn tại /snap/bini.

Bạn có thể loại bỏ iđể sửa chữa PATH của bạn.

Để xem thay đổi, bạn sẽ cần phải đăng xuất và đăng nhập lại hoặc chạy source ~/.profiletrong bất kỳ shell nào bạn đang sử dụng (hoặc khởi chạy shell với bash -l), bởi vì chỉ .profileđược đọc bởi shell đăng nhập .

Nếu bạn không thực hiện thay đổi này cho .profilechính mình, bạn có thể muốn khôi phục tệp mặc định bằng cách chạy

mv ~/.profile{,.old}
cp /etc/skel/.profile ~/.profile

Điều này đổi tên cũ .profile .profile.old(bạn cũng có thể xóa tệp nếu bạn muốn) và thay thế nó bằng phiên bản mặc định cho hệ thống của bạn từ đó /etc/skel.


5

Tôi nghĩ ở đây không rõ biểu thức sau đây có nghĩa là gì:

PATH="$HOME/bin:$HOME/.local/bin:$PATH"i

Phần đầu tiên PATH=có nghĩa là chúng ta gán một giá trị mới cho biến (môi trường) $PATH.

Phần thứ hai là giá trị mới của biến đó. Trong trường hợp hiện tại, biến $HOMEsẽ được mở rộng với giá trị hiện tại của nó và giá trị đó sẽ được nối thêm chuỗi /bin:. Điều tương tự cũng xảy ra với phần tiếp theo của chuỗi $HOME/.local/bin:. Cuối cùng, giá trị hiện tại (trước đó) của $PATHbiến sẽ được mở rộng và nối thêm. Dấu hai chấm :đóng vai trò dấu phân cách trong PATHbiểu thức.

Mục đích cuối cùng là viết : PATH=<some additional paths>+<the the current value of $PATH>. Chúng tôi đặt các đường dẫn bổ sung này ở phía trước chuỗi, vì chúng tôi muốn shell tìm kiếm các tệp thực thi trước tiên ở các vị trí này và chỉ sau đó là toàn hệ thống.

Nhân vật ilà không cần thiết. Nó sẽ được gắn vào giá trị mới $PATHvà sẽ tạo ra một mớ hỗn độn, như @Zanna giải thích trong câu trả lời của cô .


5

Có, đó là lỗi cú pháp, thực tế .profilesẽ như thế này trừ khi bạn thay đổi mọi thứ xung quanh (đây là phiên bản 17.10, xem ghi chú bên dưới):

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

Điều này có thể trông khác nhau trong các phiên bản cũ hơn của Ubuntu, nơi kiểm tra nếu binthư mục người dùng có mặt không được đưa vào .profile. Cách tốt nhất để kiểm tra xem nó trông như thế nào là nhìn vào /etc/skel/.profile.

Vì vậy, để thêm vào như bạn đã hỏi trong bình luận của bạn, chỉ cần đặt phần này vào cuối tệp hồ sơ của bạn:

# Manual addition for swift development snapshot
export PATH="$PATH:/home/jeremy/swift-4.0-DEVELOPMENT-SNAPSHOT-2017-06-29-a-ubuntu16.04/usr/bin"

Nếu bạn đã làm rối hoàn toàn hồ sơ của mình, có một bản sao mà bạn có thể lấy một cái mới từ đó /etc/skel/.


1
Tôi có thêm một dòng "export PATH = $ PATH: /home/jeremy/swift-4.0-DEVELOPMENT-SNAPSHOT-2017-06-29-a-ub Ubuntu16.04 / usr / bin" vì tôi đã cài đặt nó. Có ổn không ??
Nụ cười

3
Dòng này là tốt, tôi đưa nó vào ví dụ của tôi để hiển thị nơi đặt nó.
Videonauth

1
Xin lưu ý rằng /etc/skel/.profiletrong 16.04 trông khác nhau, không có kiểm tra cho dù có "$HOME/bin"tồn tại. Ngay cả khi đó là một biến thể tốt hơn (IMO), nó dường như đã được thay đổi trở lại vào 17.10 - vì một lý do hoặc do nhầm lẫn.
Gunnar Hjalmarsson

@GunnarHjalmarsson sẽ lưu ý rằng trong bài đăng của tôi, và vâng, đây là skel / .profile từ 17.10 tôi đang chạy.
Videonauth
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.