Мне хорошо source
известна .
утилита (также известная как ), которая берет содержимое из файла и выполняет его в текущей оболочке.
Теперь я преобразую некоторый текст в команды оболочки, а затем запускаю их следующим образом:
$ ls | sed ... | sh
ls
это просто случайный пример, исходный текст может быть любым. sed
тоже просто пример преобразования текста. Интересный момент sh
. Я прокручиваю все, что у меня есть, sh
и оно работает.
Моя проблема в том, что это означает запуск новой вспомогательной оболочки. Я бы предпочел, чтобы команды выполнялись в моей текущей оболочке. Если бы у source some-file
меня были команды в текстовом файле, я бы смог это сделать .
Я не хочу создавать временный файл, потому что кажется грязным.
В качестве альтернативы я хотел бы запустить свою вспомогательную оболочку с теми же характеристиками, что и моя текущая оболочка.
Обновить
Хорошо, решения, использующие обратный апостроф, безусловно, работают, но мне часто приходится делать это, пока я проверяю и изменяю вывод, поэтому я бы предпочел, чтобы был способ передать результат во что-то в конце.
печальное обновление
Ах, /dev/stdin
это выглядело так красиво, но в более сложном случае это не сработало.
Итак, у меня есть это:
find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/git mv -f $1 $2.doc/i' | source /dev/stdin
Это гарантирует, что все .doc
файлы имеют расширение в нижнем регистре.
И с чем, кстати, можно разобраться xargs
, но не в этом дело.
find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/$1 $2.doc/i' | xargs -L1 git mv
Итак, когда я запустил первый, он сразу выйдет, ничего не происходит.