Có một bí danh ảnh hưởng đến bí danh khác?


14

Tôi chưa có nhiều bí danh được thiết lập trong tệp .bash_aliases của mình. Chỉ gần đây tôi mới phát hiện ra chúng hữu ích như thế nào.

Tôi có thể thấy bản thân mình bị cuốn hút vào các bí danh vì vậy trước khi tập tin trở nên quá khó sử dụng, tôi muốn làm rõ điều gì đó bằng cách hỏi một câu hỏi rất đơn giản. Liệu một bí danh có ảnh hưởng đến một bí danh khác, hay bí danh luôn trở lại lệnh ban đầu?

Một ví dụ có thể làm cho điều này rõ ràng hơn:

Tôi đã lsbí danh ls -lF. Hãy nói rằng tôi muốn cũng bí danh dđể ls -l | grep -E "^d": không dhiện đang sử dụng ls -lFở vị trí của ls? Nếu vậy, đó có phải là vấn đề trật tự trong tệp cấu hình .bash_aliases không?

man alias đã không khai sáng cho tôi.

Câu trả lời:


20

Từ Bí danh (phần 6.6 của Hướng dẫn Bash) :

Từ đầu tiên của mỗi lệnh đơn giản, nếu không được trích dẫn, được kiểm tra xem nó có bí danh không. Nếu vậy, từ đó được thay thế bằng văn bản của bí danh.

Điều này xảy ra khi bạn sử dụng bí danh, không phải khi bạn xác định nó. Đây là một ví dụ:

$ alias a1='a2 hello'
$ alias a2='echo'
$ a1
hello
$ unalias a2
$ a1
bash: a2: command not found

1
OK, cảm ơn vì ví dụ đó (và cũng vì liên kết đến Hướng dẫn Bash). Tôi trích dẫn từ Hướng dẫn: "Các quy tắc liên quan đến định nghĩa và sử dụng bí danh có phần khó hiểu ... Đối với hầu hết mọi mục đích, các hàm shell được ưa thích hơn các bí danh." Tôi đoán tôi nên học cách làm các hàm shell sau đó. :)
boehj

1
Đúng. Bí danh có thể giúp bạn tiết kiệm một số thao tác gõ cho các lệnh phổ biến, nhưng đối với bất kỳ thứ gì thậm chí từ xa phức tạp, hãy viết các hàm tùy chỉnh để xử lý nó thường là một lựa chọn tốt hơn.
Caleb

@Caleb @Gilles - Cảm ơn mọi người. BTW, ls = 'ls --color' Tôi có thể thấy rất tiện dụng. Yêu trang web này. :)
boehj

2
@boehj: Một nguyên tắc nhỏ là sử dụng bí danh khi bạn muốn có các đối số tự động cho một lệnh, sử dụng tên của lệnh hoặc một biến thể nhỏ và các chức năng khác. Vì vậy alias ls='ls --color', alias cp='cp -i'nhưng chức năng cho những thứ phức tạp hơn. Cụ thể, tôi sẽ tạo cho bạn dmột hàm để bạn có thể truyền đối số cho ls. [bình luận được đăng lại để sửa lỗi braino khó hiểu, cảm ơn @cjm]
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles - OK, nhiệm vụ của tôi hôm nay là dạy bản thân cách nhân rộng dnhư một hàm shell.
boehj
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.