Как увидеть команду, прикрепленную к псевдониму 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.