Як бачити команду, додану до псевдоніма 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.