Khôi phục chức năng 'cd ..' sau khi theo liên kết tượng trưng


13

Nếu tôi tạo một liên kết tượng trưng trong thiết bị đầu cuối với một lệnh như

ln -s /path/to/some/directory symbolicLink

và sau đó theo liên kết với

cd symbolicLink

thiết bị đầu cuối dường như nghĩ rằng cwd ~/symbolicLink/mặc dù nó thực sự đang hiển thị ~/path/to/some/directory/(tất nhiên giả sử rằng liên kết đã được thực hiện ~). Điều này có nghĩa là nếu sau đó tôi gõ cd ..tôi được đưa trở lại ~, bởi vì thiết bị đầu cuối 'nghĩ' đây là cha mẹ của cwd.

Tôi cần gì để thay đổi như vậy cd ..thay vào đó sẽ đưa tôi đến ~/path/to/some/, tức là cha mẹ thực sự của ~/path/to/some/directory/?

Câu trả lời:



5

Có một cảnh báo tinh tế trong cd -Phành vi (được đăng dưới dạng câu trả lời vì độ dài):

$ dir1=$(mktemp --directory)
$ dir2=$(mktemp --directory)
$ ln -s -- "$dir1" /tmp/start
$ ln -s -- "$dir2" "$dir1"
$ cd "/tmp/start/"*
$ cd -P ..

Nên pwdin gì bây giờ? Theo logic, nó có thể là một trong hai

  1. $dir1, nếu cd -P ..làm cd ..trước và cd -- "$(readlink -f)"sau, hoặc
  2. /tmp, nếu cd -P ..làm cd -- "$(readlink -f)"trước và cd ..sau.

Trong thực tế, nó làm cái sau, có nghĩa pwdlà trực giác cao hơn hai cấp so với thư mục "cha mẹ".


1
Cảm ơn! cd -Pvẫn giải quyết vấn đề tôi đang đối mặt, nhưng vẫn hữu ích để biết.
Val


2

Tôi cảm thấy nỗi đau của bạn. Tôi coi bashnhư bị phá vỡ để sử dụng tương tác vì hành vi này.

tcshlà một vỏ thân thiện hơn nhiều để sử dụng tương tác. Để lại bashcho lập trình (nếu bạn khăng khăng viết kịch bản shell khi có nhiều lựa chọn thay thế tốt hơn trong số nhiều ngôn ngữ kịch bản).

Để thay đổi shell cho bất kỳ người dùng nào, hãy nhập chshdòng lệnh và làm theo lời nhắc (một lần nữa, tôi khuyên bạn nên /bin/tcshvà cuốn sách O'Reilly tuyệt vời Sử dụng csh và tcsh , có sẵn cho bên cạnh không sử dụng gì).


Kể từ khi tôi viết câu trả lời này, tôi đã học được cách ngừng lo lắng và yêu thích Bash để sử dụng tương tác. Nhưng tôi vẫn không thể xử lý các cdhành vi mặc định cho các liên kết tượng trưng. Tôi phải nhớ đặt set -o physicaltrong .bashrchoặc .bash_profilecho mọi máy tôi sử dụng.
dodgethesteamler
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.