2

Кто-нибудь из вас знает способ расширения псевдонима при каждом вызове новой оболочки (из любого места)?

Например, мой псевдоним:

alias ls='ls -F'
  • Теперь, если я вызову это в

    grep -l ramesh | xargs ls
    

    … Здесь я должен получить вывод ls -F .

  • Если я сделаю, например, для

    cut -f 1 `ls test*`
    

    Я должен получить замену ls -F .

В скрипте оболочки есть эта опция shopt -s expand_aliases но как мне ее получить везде?

1 ответ1

4

Поскольку ls самом деле не вызывается вашей оболочкой в первом примере, псевдоним не работает с xargs .

Псевдонимы не экспортируются в подоболочки, поэтому второй пример не выполняется.

Поскольку псевдонимы оцениваются после чтения строки, вы также не можете, например, foo=$( alias ls='ls -l' ; ls ) .


Чтобы получить желаемый эффект только в bash , вы можете использовать функции, например:

function ls { /bin/ls -F "$@" ; }

Вы можете добавить их в подоболочки, чтобы это работало:

ret=$( function ls { /bin/ls -l "$@" ; } ; ls )

Правильное решение, чтобы оно работало во всех местах, где любая программа выполняет ls , поместите скрипт с именем ls перед фактическим ls в поисковой $PATH который вызывает фактический ls с параметром -F .

#!/bin/bash
/bin/ls -F "$@"

Сохраните как /usr/local/bin/ls и export $PATH=/usr/local/bin:$PATH .

Помните о программах, использующих жестко запрограммированные /bin/ls , и о программах, которые анализируют вывод ls и завершатся с ошибкой, когда формат отличается от ожидаемого.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .