передача составленных команд в качестве аргументов

Рассмотрим скрипт pass_command

 ls | "$@" 

Он принимает именованные команды как аргументы

 pass_command sort #prints files sorted 

Это достаточно хорошо для всех практических целей. Мне любопытно, есть ли механизм, который позволяет мне передавать сложные команды? Что-то вроде

 pass_command (sort | uniq) #Forgive the silly example. 

Изменить: более сложный пример, который мотивировал этот вопрос.

 until who | grep mary do sleep 60 until 

Сигналы mary регистрируются. Я хотел обобщить это, чтобы сигнализировать о каком-то событии. Интуитивная идея заключалась в следующем:

 #watchfor until "$@" do sleep 60 done 

И тогда вы бы назвали это как

 watchfor (who | grep mary) 

Это была идея. Вы можете дать аргументу имя, и это работает отлично. Это заставило меня подумать об этом.

Полагаю, я пытался понять самый идиоматический способ скрытия команды сигнализации.

One Solution collect form web for “передача составленных команд в качестве аргументов”

Вам нужно будет использовать eval в скрипте, как только $@ больше, чем простая команда (аргумент скрипту должен быть передан как строка с кавычками):

 ls | eval "$@" 

Но опять же, это также будет таким же, как

 pass_command sort | uniq 

т.е. вы передаете команду sort и используете uniq на выходе.

Я не вижу реального использования такого сценария или функции, поскольку возможности конвейерной обработки Unix, по-видимому, охватывают большинство практических приложений.

  • Безопасная доля в самбе не работает, почему?
  • grep для текста, который может или не может присутствовать
  • Общие обозначения и стандарты флагов для сценариев и функций оболочки
  • Если символ EOF обрабатывается при отправке через telnet-соединение
  • Условно убивая процесс, основанный на его выходе
  • Форматирование в формате Printf с переменным форматом - что делает эта ссылка?
  • Извлечение запросов из файла журнала, которые не включают запрещенные строки
  • Событие не найдено в вызове sed в сценарии csh
  • Практическое использование команды «shift» shell builtin?
  • ~ / .bash_profile выполняется для не-регистрационных оболочек
  • Сценарий оболочки, использующий функцию (), не находящую команду
  • Linux и Unix - лучшая ОС в мире.