Tôi có thể tạo một thư mục tùy chỉnh tiếng bí danh như '~' trong bash không?


13

Trong bash tôi có thể vào thư mục chính của mình cd ~và thực sự tham khảo thư mục chính của tôi với bất kỳ lệnh nào với ~.

Tôi có thể tạo "bí danh thư mục" mới, tùy chỉnh để tham chiếu đến các thư mục khác không? Ví dụ giả thuyết:

make_alias "~~" /mnt/photon/work/foo_project/

cp ~/home.png ~~/set_8/home_4.png

Làm thế nào nó có thể được thực hiện, nếu vậy? Nếu nó không thể, nó là do thiết kế và tại sao như vậy?

Rất vui được có: Nơi nào và như thế nào ~được thiết lập và ràng buộc với "~" này?


1
Không đặc biệt hữu ích với bạn, nhưng bạn có thể làm điều đó với các bí danh toàn cầu trong .... ZSH, nhưng không phải BASH. : bí danh -g ~ ~ = '/ mnt / photon / work / foo_project /'
SuperMagic

1
@SuperMagic: Tôi cũng thích bí danh toàn cầu. Nhưng trong ví dụ thứ hai (cp ~ ~ / set ...) họ sẽ thất bại. Các thư mục được đặt tên là phù hợp hơn: n=/mnt/photon/work/foo_projectvà sau đó cp foo ~n/bar. (Lưu ý cho OP: Cũng giới hạn ở zsh).
mpy

1
@OliverSalzburg: Tôi không nghĩ đây là bản sao. Câu hỏi khác hỏi về việc sửa lại ký tự đơn ( @hoặc _), điều không thể xảy ra trong bash, trong khi ~~chắc chắn là (hacky, nhưng có thể). Ngoài ra, nó không trả lời cách thức ánh xạ này được thực hiện.
Dennis

Câu hỏi liên quan là: superuser.com/questions/541767
n611x007

Câu trả lời:


25

Dấu ngã không phải là bí danh, đó là một phần của việc mở rộng vỏ của bash (giống như *.txthoặc $((1 + 2))).

Mở rộng Bash tilde hỗ trợ các tiền tố dấu ngã sau:

~            The value of $HOME

~/foo        $HOME/foo

~fred/foo    The subdirectory foo of the home directory of the user fred

~+/foo       $PWD/foo

~-/foo       ${OLDPWD-'~-'}/foo

~N           The string that would be displayed by `dirs +N'

~+N          The string that would be displayed by `dirs +N'

~-N          The string that would be displayed by `dirs -N'

dirssử dụng ngăn xếp thư mục. Bạn có thể sử dụng pushdđể thêm một thư mục vào nó.

Để trả lời câu hỏi cụ thể của bạn về ~~, vâng, có thể ánh xạ một thư mục đến nó. Chỉ cần tạo một người dùng được gọi ~và đặt /mnt/photon/work/foo_project/làm thư mục chính của nó:

sudo useradd '~'
sudo sed -i 's#:/home/~:[^:]*$#:/mnt/photon/work/foo_project:/bin/false#' /etc/passwd

Tất nhiên, một cách tiếp cận "saner" hơn nhiều chỉ là xác định một biến shell trỏ đến thư mục của bạn ~/.bashrctrong lệnh của bạn bằng lệnh

foo=/mnt/photon/work/foo_project

có thể được truy cập thông qua $foo, như thường lệ.

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.