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