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

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

  • Xargs для извлечения имени файла
  • Пустые строки при выполнении «grep | xargs "в" find -exec "
  • Странная ошибка «Нет такого файла» с «xargs» и «file»
  • Является ли выход смешанным как это из-за xargs и как я могу его исправить?
  • Как распределить вычисления «tar czf» в течение длительного времени?
  • Поиск строки в каталоге. Получить вывод без имени файла.
  • Внутренний вызов функции с параметрами xargs
  • Предоставлять строки, хранящиеся в файле, в виде списка аргументов для команды?
  • Массовое переименование файлов на камкордерах, включая пробелы
  • Нет такой ошибки файла или каталога при использовании xargs
  • Как правильно использовать параллель в этой ситуации?
  • Interesting Posts

    Почему файлы файлов rar файлов-файлов в Debian 8?

    Почему моя WiFi-карта невостребована драйверами в UbuntuMATE?

    Как использовать sed, awk или grep для удаления определенного шаблона, но все остальное

    Объединение двух сценариев bash и использование меню

    VM-клонирование VS-скриптовая настройка / конфигурация

    Linux Mint 11 не будет подключаться к Windows 7 Wireless Ad Hoc

    Почему я получаю ошибку несуществующего класса в PHP на Fedora?

    rpmbuild: как я могу «потребовать» один пакет * или * другой

    Открытие устройства TUN из QEmu x86 для ARMv7 не выполняется

    Недействительный параметр fsck

    Как установить программу EMIRGE для записи файлов с требуемым разрешением

    изменение идентификатора владельца UID для 10 пользователей в каталоге 10 + TB

    Создание монтирования с поддержкой `rw`, когда диск не поддерживает чтение и запись одновременно

    Где хранятся настройки Plasma 5 по умолчанию?

    iptables не действует на scapy-пакеты

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