Unix: вопрос о xargs

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

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

Например ( 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 ?

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 , но он не знает об псевдонимах, поэтому он просто запускает первый, который он находит в пути.

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

  • ssh-add добавить все закрытые ключи в .ssh каталог
  • Исправлен последний аргумент с xargs
  • Интерактивное удаление файлов, перечисленных с помощью путей в текстовом файле
  • Что делает эта командная строка (`echo $ 1 | xargs -n 1 basename | cut -d '.' -f1`)?
  • xargs - добавить каждый аргумент с параметром
  • копировать файлы с целевым именем на основе md5, используя find и xargs
  • почему не xarss правильно разбирает мой вход?
  • Передача параметров mulitiple через xargs
  • Как я удаляю все файлы в каталоге с конкретными расширениями, за исключением последних 5 из них
  • zsh "echo SomeText >> ** / filename" в других оболочках
  • Измените код ASP на PHP-код во всех файлах
  • Как я могу предотвратить использование аргументов аргументов `xargs` в префиксах пробелами?
  • Linux и Unix - лучшая ОС в мире.