Unix: вопрос о xargs

В AIX (но это также происходит и на HP-UX), у меня есть GNU ls на моем пути, и он также псевдонимеруется как ls .

Но когда я использую xargs, он использует стандартный Unix ls вместо псевдонима.

  • Можете ли вы подключиться к функции .bash_profile?
  • рекурсивно chmod
  • Почему некоторые точки в AIX никогда не используются повторно?
  • Как узнать, что наводняет терминал?
  • Почему загрузка процессора PowerPM LPAR отрицательна
  • Импортировать SQL-файлы с помощью xargs
  • Например ( flocate – это функция, которая находит точный путь объекта поиска):

     flocate mirrorvg | xargs ls -lh ls: illegal option -- h usage: ls [-1ACFHLNRSabcdefgiklmnopqrstuxEUX] [File...] ls -lh /usr/sbin/mirrorvg -r-xr-x--- 1 root system 37K apr 3 2014 /usr/sbin/mirrorvg* 

    Почему xargs не использует псевдоним ls ?

  • Проверка пароля AIX для root из скрипта
  • печать специальных символов в awk-выходе
  • Существует ли верхний предел количества процессов зомби, которые вы можете иметь?
  • как вернуться к базовому скрипту из хвоста -f
  • Как я могу рекурсивно заменить строку в именах файлов и каталогов?
  • Выполнение обратной задачи последовательно выполняется для нескольких Unices с xterm
  • 2 Solutions collect form web for “Unix: вопрос о xargs”

    Команда xargs может выполнять команды, а не псевдонимы. Однако параллель GNU может запускать функции:

     The command must be an executable, a script, a composed command, or a function. If it is a function you need to export -f the function first. An alias will, however, not work (see why http://www.perlmonks.org/index.pl?node_id=484296). 

    Поэтому я бы рекомендовал:

    • Предоставляя xargs полный путь к версии ls, которую вы хотите использовать (или однозначное имя, возможно, gls зависимости от того, как оно было установлено в вашей системе) или, если ваша оболочка позволяет это,

    • Определение ls как функции ( function ls { gls "$@"; }; export -f ls в bash) и использование GNU-параллели вместо xargs ( parallel -j1 если вы хотите использовать один процессор).

    Подстановка псевдонима выполняется оболочкой. Если оболочка пытается вызвать команду foo , и существует псевдоним foo=bar , это оболочка, которая заменяет foo на bar здесь.

    Оболочка делает это только для команд. (В противном случае также будут заменены аргументы, которые будут xargs с xargs .) Но ваш ls здесь не запускается оболочкой, а аргументом для xargs . Поэтому оболочка не заменяет его.

    Тогда xargs выполняет ls , но он не знает об псевдонимах, поэтому он просто запускает первый, который он находит в пути.

    Алиасы являются внутренними для оболочки, и нет стандартизированного способа, чтобы программа могла их прочитать.

    Linux и Unix - лучшая ОС в мире.