Поскольку 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
и завершатся с ошибкой, когда формат отличается от ожидаемого.