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

Рассмотрим скрипт 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) 

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

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

  • Как я могу запустить программу из bash, игнорируя ее stdout, чтобы я мог запускать больше программ?
  • Как получить функцию getopts при вызове другой функции внутри файла
  • Китайские иероглифы, а не латинский, записываются в файл
  • мы можем получить отсортированный выход grep
  • Разрешение отклонено при получении файла md5sum с помощью сценария оболочки?
  • Странная разница между pwd и / bin / pwd
  • Почему оболочка не заканчивается при нажатии Ctrl + C на терминале?
  • Можно ли удалить все права на запись в оболочке для текущего пользователя
  • One Solution collect form web for “передача составленных команд в качестве аргументов”

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

     ls | eval "$@" 

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

     pass_command sort | uniq 

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

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

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