Як бачити команду, додану до псевдоніма bash?


324

Припустимо, у мене в псевдонімі є псевдонім. Чи є проста команда для друку, яка команда буде виконувати псевдонім?

Відповіді:


431

typeВбудований корисний для цього. Він не тільки розповість про псевдоніми, але й про функції, вбудовані, ключові слова та зовнішні команди.

$ 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 cmdпокаже всі команди під цим іменем у порядку пріоритетності, що корисно для lsпсевдоніму вище, де сам псевдонім викликає ls.

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

Це говорить про те, що при запуску ls, /bin/lsбуде використовуватися, і --color=autoбудуть включені в список аргументів, на додаток до будь-якої іншої додати себе.


що робити, якщо псевдонім містить БІЛЬШЕ Псевдоніми?
користувач251046

2
@ user251046 продовжуйте використовувати, typeпоки ви не потрапите на щось інше, ніж псевдонім ...
geirha

Мені подобається ця відповідь, тому що typeбуду аналізувати / інтерпретувати будь-які цитати, тож ви можете переконатися, що цитати є правильними.
Вісбукі

Я отримав ls is aliased to 'ls --color=auto', але як я можу заглибити один шар глибше, щоб побачити, чи він використовує / bin / ls або / usr / local / bin / ls чи що?
крубо

1
@krubo type -a lsпокаже всі команди ls, знайдені в порядку вподобання. Залежно від псевдоніма той, який буде виконаний псевдонімом.
geirha

163

Просто введіть aliasпід час запиту Shell. Він повинен вивести список усіх активно діючих псевдонімів.

Або ви можете ввести, alias [command]щоб побачити, яким певним псевдонімом є псевдонім, як приклад, якщо ви хочете дізнатись, що lsпсевдонім був псевдонім, ви могли б зробити alias ls.


12
Або введіть, alias lsщоб дізнатись, що конкретно lsє іноземцем.
poolie

2
@poolie Дійсно. Я думаю, що питання полягав у тому, щоб побачити всі псевдоніми, тому я не деталізував далі команду псевдоніму.
Thomas Ward

хоча це працює для псевдонімів, він не працює, якщо ви визначили функцію власної оболонки. typeпроте працює в обох випадках.
Sujay Phadke

53

Мені дуже подобається Ctrl+ Alt+ , Eяк я дізнався з цієї відповіді . Він "розширює" поточний набраний командний рядок, тобто він виконує псевдонім розширення (серед іншого).

Що це означає? Перетворюється будь-який псевдонім, який може бути записаний в командному рядку, у те, до чого виступає псевдонім.

Наприклад, якщо я набираю:

$ ls

а потім натисніть Ctrl+ Alt+ E, воно перетворюється на

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

це еквівалент в інших дистрибутивах?
sepehr

@sepehr Працює над Debian, я вважаю, що це баш-функція і повинна працювати над будь-яким дистрибутивом.
Der Hochstapler

4
Ви маєте рацію, він працює на bash, але у мене є zsh, і він, на жаль, не працює.
sepehr

було дуже корисно. У мене була інша мета - розширити одну з попередніх команд bash, що увійшли в історію, тобто 394, щоб я міг її відредагувати спочатку перед виконанням
XXL

1
Він має один застереження. Коли псевдонім містить необхідні лапки, вони будуть видалені. Отже, я отримую squeue -u davidmh -o %.18i %.9P %.25j %.8u %.8T %.10M %.9l %.6D %R замістьsqueue -u davidmh -o "%.18i %.9P %.25j %.8u %.8T %.10M %.9l %.6D %R "
Davidmh

10

Строго кажучи правильною відповіддю є використання масиву BASH_ALIASES, наприклад:

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

2
Я вважаю це корисним у ситуації, коли мені хотілося, щоб програмний доступ до фактичного висловлювання був відчужений без корисних для людини речей.
М. Джастін

це не працює в zsh
ProGrammar

1
@ProGrammar питання стосувалося bash - для zsh слід шукати питання про zsh
noonex

1
Бінго. Саме те, що мені було потрібно, як і @J.Justin - я хочу скласти більше комутаторів на поточний lsпсевдонім, не змінюючи того, що там є. Тож я берусь alias ls="${BASH_ALIASES[ls]} --time-style=iso"за свою справу.
Багатий

2

Ви можете використовувати whichкоманду.

Якщо ви встановите псевдонім lsяк ls -alі потім введіть which ls, ви побачите:

ls: aliased to ls -al.


bash не має whichкоманди.
geirha

Не працює для мене ..
Chiel ten Brinke

2
whichце поганий спосіб пошуку псевдонімів, як пояснено тут: unix.stackexchange.com/questions/10525/… Це навіть не працює для мене для псевдонімів в баші на Ubuntu.
Sujay Phadke
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.