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 ?

  • «Список аргументов слишком длинный»: как мне с этим справиться, не меняя мою команду?
  • Как использовать определенную функцию с xargs
  • команда solaris + xargs для солярия
  • find: несколько `-exec` с условиями
  • xargs с перенаправлением stdin / stdout
  • Как выполнить выходную строку без замены команды bash?
  • Как процитировать аргументы с помощью xargs
  • Необходимо отформатировать 5 дисков параллельно
  • 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

    SOCKS5 существует шифрование между клиентом и прокси-сервером?

    rdesktop: ошибка при загрузке разделяемых библиотек

    Разрешение отклонено (даже как root) на смонтированном ISO-изображении с помощью Furius ISO Mount

    не удалось запустить nginx на debian 8 jessie

    Применить комбинацию клавиш клавиатуры при выпуске

    Почему каждая переменная не инициализируется значением своего значения по умолчанию для объявления в Bash?

    Изменение имени пользователя по-прежнему оставляет старые следы

    Не удалось удалить libglib2.0-0 из Software Center

    Как настроить туннель IPv6 в Fedora?

    Утилита для TRIM нераспределенного пространства на диске

    Как настроить клиент openvpn на linux mint

    zsh с использованием процессора на 100% после запуска редактора атома

    Ошибки сборки RPM

    Loop в WildCard как вход скрипта

    Является ли это ядро ​​предупреждением о серьезной проблеме, которая нуждается в моем внимании?

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