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 ?

  • Невозможно запросить пользователя с помощью опции rm bultin prompt -i с помощью xargs и найти
  • basename не работает должным образом
  • Использование xargs с git
  • Найти файлы рекурсивно, которые старше одного года и не принадлежат конкретному пользователю
  • Найти -exec + vs find | xargs. Какой из них выбрать?
  • Команда xargs приводит к sed:;: Нет такого файла или каталога
  • Почему xargs -n 1 настолько медленный для длинных строк
  • Когда вы должны использовать подоболочки vs `xargs`?
  • 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

    Почему бы мне не получить графический интерфейс Gnome при установке Red Hat?

    Выводит ли вывод pgrep параметры, предоставленные процессу?

    Определить версию libc, используемую для создания статической библиотеки

    Не удалось обновить или установить с помощью apt-get

    Уровни запуска Linux: каково влияние запуска службы httpd на 35 и на 0123456

    Как удалить постоянные данные конфигурации из APT?

    Понимание формата прошедшего времени ps для длительных процессов

    Самый быстрый способ переименования файлов без переименования пути каталога

    Ошибка файловой системы только для чтения при создании каталога?

    Скопирование в гном-терминале

    Есть ли общая программа X11?

    Как я могу пакетно экспортировать весь контент, содержащийся в символических ссылках? (а затем удалить их все)

    Как я могу сократить строки, показанные на панели i3status?

    путают о двойном цитировании

    Где пропало / dev / tcp?

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