Làm thế nào để xem lệnh được gắn vào bí danh bash?


324

Giả sử tôi có một bí danh trong vỏ bash. Có một lệnh đơn giản để in ra lệnh mà bí danh sẽ chạy không?

Câu trả lời:


431

Nội dung typenày hữu ích cho việc này. Nó sẽ không chỉ cho bạn biết về bí danh, mà còn các chức năng, nội dung, từ khóa và các lệnh bên ngoài.

$ type ls
ls is aliased to `ls --color=auto'
$ type rm
rm is /bin/rm
$ type cd
cd is a shell builtin
$ type psgrep
psgrep is a function
psgrep () 
{ 
    ps -ef | { 
        read -r;
        printf '%s\n' "$REPLY";
        grep --color=auto "$@"
    }
}

type -a cmdsẽ hiển thị tất cả các lệnh theo tên đó theo thứ tự ưu tiên, rất hữu ích cho lsbí danh ở trên, nơi mà chính bí danh gọi ls.

$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls

Điều này cho bạn biết rằng khi bạn chạy ls, /bin/lssẽ được sử dụng và --color=autosẽ được đưa vào danh sách các đối số của nó, ngoài bất kỳ đối số nào khác mà bạn tự thêm.


Phải làm gì khi một bí danh chứa nhiều bí danh?
dùng251046

2
@ user251046 tiếp tục sử dụng typecho đến khi bạn đạt được thứ gì đó không phải là bí danh ...
geirha

Tôi thích câu trả lời này vì typesẽ phân tích / giải thích bất kỳ trích dẫn nào, vì vậy bạn có thể chắc chắn rằng các trích dẫn là đúng.
wvducky

Tôi đã nhận ls is aliased to 'ls --color=auto', nhưng làm thế nào tôi có thể nhận được một lớp sâu hơn, để xem liệu nó sử dụng / bin / ls hoặc / usr / local / bin / ls hay gì?
krubo

1
@krubo type -a lssẽ hiển thị tất cả các lệnh ls được tìm thấy theo thứ tự ưu tiên. Bất cứ điều gì ngay bên dưới bí danh là cái sẽ được thực hiện bởi bí danh.
geirha

163

Chỉ cần gõ aliastrong khi tại dấu nhắc Shell. Nó sẽ xuất ra một danh sách tất cả các bí danh đang hoạt động.

Hoặc, bạn có thể nhập alias [command]để xem bí danh cụ thể được đặt bí danh là gì, ví dụ, nếu bạn muốn tìm hiểu lsbí danh đó là gì, bạn có thể làm gì alias ls.


12
Hoặc gõ alias lsđể tìm hiểu cụ thể lslà bí danh.
poolie

2
@poolie Thật vậy. Tôi nghĩ rằng câu hỏi là để xem tất cả các bí danh, tuy nhiên, đó là lý do tại sao tôi không giải thích thêm về lệnh bí danh.
Thomas Ward

trong khi điều này hoạt động với bí danh, nó không hoạt động nếu bạn đã xác định hàm shell tùy chỉnh. typetuy nhiên, hoạt động trong cả hai trường hợp.
Sujay Phadke

53

Tôi thực sự thích Ctrl+ Alt+ Enhư tôi đã học được từ câu trả lời này . Nó "mở rộng" dòng lệnh hiện đang gõ, nghĩa là nó thực hiện mở rộng bí danh (trong số những thứ khác).

Điều đó nghĩa là gì? Nó biến bất kỳ bí danh nào, hiện có thể được viết trên dòng lệnh, thành những gì bí danh đại diện.

Ví dụ: nếu tôi gõ:

$ ls

và sau đó nhấn Ctrl+ Alt+ E, nó được chuyển thành

$ ls --time-style=locale --color=auto

cái này có tương đương trên các distro khác không?
sepehr

@sepehr Hoạt động trên Debian, tôi cho rằng đó là một tính năng bash và sẽ hoạt động trên mọi bản phân phối.
Der Hochstapler

4
bạn nói đúng, nó hoạt động trên bash nhưng tôi có zsh và nó không hoạt động.
sepehr

đã thực sự hữu ích. Tôi đã có một mục tiêu khác là mở rộng một trong các lệnh bash trước đó được ghi lại trong lịch sử với, tức là, 394, để tôi có thể chỉnh sửa nó trước khi thực hiện
XXL

1
Nó có một cảnh báo. Khi một bí danh bao gồm các trích dẫn cần thiết, chúng sẽ bị xóa. Vì vậy, tôi nhận được squeue -u davidmh -o %.18i %.9P %.25j %.8u %.8T %.10M %.9l %.6D %R thay vìsqueue -u davidmh -o "%.18i %.9P %.25j %.8u %.8T %.10M %.9l %.6D %R "
Davidmh

10

Nói đúng câu trả lời đúng là sử dụng mảng BASH_ALIASES, ví dụ:

$ echo ${BASH_ALIASES[ls]}
ls -F --color=auto --show-control-chars

2
Tôi thấy điều này hữu ích trong một tình huống mà tôi muốn truy cập theo chương trình vào tuyên bố thực tế được đặt bí danh mà không có những thứ hữu ích cho con người xung quanh nó.
M. Justin

điều này không hoạt động trong zsh
ProGrammar

1
@ProGrammar câu hỏi là về bash - đối với zsh, bạn nên xem câu hỏi về zsh
noonex

1
Chơi lô tô. Chính xác những gì tôi cần, giống như @ M.Justin - Tôi muốn xếp nhiều công tắc hơn vào lsbí danh hiện tại mà không thay đổi những gì ở đó. Vì vậy, tôi sẽ alias ls="${BASH_ALIASES[ls]} --time-style=iso"cho trường hợp của tôi.
Giàu

2

Bạn có thể sử dụng whichlệnh.

Nếu bạn đặt bí danh cho lsas ls -alvà sau đó nhập which ls, bạn sẽ thấy:

ls: aliased to ls -al.


Bash không có whichlệnh.
geirha

Không làm việc cho tôi ..
Chiel ten Brinke

2
whichlà một cách tồi để tra cứu các bí danh như được giải thích ở đây: unix.stackexchange.com/questions/10525/. Nó thậm chí không hoạt động đối với tôi đối với các bí danh trong bash trên Ubuntu.
Sujay Phadke
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.