Как увидеть команду, прикрепленную к псевдониму bash?


325

Предположим, у меня есть псевдоним в оболочке bash. Есть ли простая команда, чтобы распечатать, какую команду будет запускать псевдоним?

Ответы:


432

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будет включен в список аргументов, в дополнение к любому другому, который вы добавляете сами.


что делать, если псевдоним содержит больше псевдонимов?
user251046

2
@ user251046 продолжай использовать, typeпока не нажмешь что-то кроме псевдонима ...
geirha

Мне нравится этот ответ, потому что он typeбудет анализировать / интерпретировать любые кавычки, чтобы вы могли убедиться, что они верны.
Висбуки

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

1
@krubo type -a lsпокажет все команды ls, найденные в порядке предпочтения. В зависимости от того, что находится под псевдонимом, будет выполняться псевдоним.
Гейра

163

Просто введите aliasв командной строке Shell. Он должен вывести список всех текущих активных псевдонимов.

Или вы можете напечатать, alias [command]чтобы увидеть, к какому псевдониму привязан конкретный псевдоним. Например, если вы хотите узнать, к какому lsпсевдониму добавлен псевдоним, вы можете сделать это alias ls.


12
Или введите, alias lsчтобы узнать, к чему конкретно lsпривязан.
Poolie

2
@poolie Действительно. Я думаю, что вопрос заключался в том, чтобы увидеть все псевдонимы, поэтому я не стал более подробно останавливаться на команде псевдонимов.
Томас Уорд

хотя это работает для псевдонимов, оно не работает, если вы определили пользовательскую функцию оболочки. typeоднако работает в обоих случаях.
Суджай Пхадке

53

Мне очень нравится Ctrl+ Alt+ , Eкак я узнал из этого ответа . Он «раскрывает» набранную в настоящее время командную строку, что означает расширение псевдонима (среди прочего).

Что это обозначает? Он превращает любой псевдоним, который может быть записан в командной строке, в псевдоним.

Например, если я наберу:

$ ls

а затем нажмите Ctrl+ Alt+ E, она превращается в

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

есть ли это эквивалент в других дистрибутивах?
Сепер

@sepehr Работает на Debian, я предполагаю, что это особенность bash и должна работать на любом дистрибутиве.
Der Hochstapler

4
Вы правы, это работает на Bash, но у меня есть Zsh, и это не работает, к сожалению.
Сепер

было действительно полезно. У меня была другая цель - расширить одну из предыдущих команд 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

1
@ProGrammar вопрос был о bash - для zsh вы должны посмотреть вопросы о zsh
noonex

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

2

Вы можете использовать whichкоманду.

Если вы установите псевдоним lsкак, ls -alа затем введите which ls, вы увидите:

ls: aliased to ls -al,


Баш не имеет whichкоманды.
Гейра

Не работает для меня ..
Чиль тен Бринке

2
whichплохой способ поиска псевдонимов, как описано здесь: unix.stackexchange.com/questions/10525/… У меня даже не работает псевдонимы в bash на Ubuntu.
Суджай Пхадке
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.