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 ?

  • поиск имен папок на основе списка, содержащегося в файле .txt
  • Правильно избегая выхода из трубы в xargs
  • Список файлов с меткой времени с эпохи
  • Можете ли вы подключиться к функции .bash_profile?
  • Неверное поведение xargs
  • Как вы можете перемещать или копировать определенные файлы из списка текстовых файлов
  • Использование xargs с git
  • Как мне регистрировать xargs -0 rm?
  • 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 , но он не знает об псевдонимах, поэтому он просто запускает первый, который он находит в пути.

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

    Interesting Posts

    подсветка синтаксиса zsh для файлов

    Доля NFS внутри общего ресурса NFS или Samba недоступна

    Почему кеш-кеш никогда не получает никаких хитов?

    Фильтрация результата команды find, так что она возвращает только каталоги

    Как я могу поместить эту строчную манипуляцию в цикле, чтобы она продолжалась, пока нечего делать?

    hdmi не отображается в xrandr

    Как я могу вернуться в «обычный» режим редактирования после нажатия esc в режиме zsh (vi)?

    Автозаполнение: ограничение энтузиазма программы

    Beaglebone Black не может отправлять сырые пакеты UDP с Python на ноутбук под управлением Ubuntu 16.04

    Как отключить позиционные параметры?

    Управление памятью: устранение виртуальных адресов

    Как я могу форматировать флэш-накопитель, чтобы удалить все существующие файлы?

    Есть ли какие-либо проблемы с предоставлением прав пользователя root, сделав их UID = 0 GID = 0?

    Как найти слот pci контроллера usb в Linux?

    Разрешение спецификации:% i и% I разница?

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