Как выполнить вывод команды в текущей оболочке?

я хорошо осведомлен оsource (ака.) утилита, которая возьмет содержимое из файла и выполнит его в текущей оболочке.

Сейчас я'm преобразовывает некоторый текст в команды оболочки, а затем запускает их следующим образом:

$ ls | sed ... | sh

ls это просто случайный пример, оригинальный текст может быть чем угодно.sed тоже просто пример для преобразования текста. Интересный битsh, Я трубку все, что я долженsh и это работает.

Моя проблема в том, что это означает запуск новой вложенной оболочки. Я'Я предпочел бы, чтобы команды выполнялись в моей текущей оболочке. Как я мог бы сделать сsource some-fileЕсли бы у меня были команды в текстовом файле.

Я неЯ не хочу создавать временный файл, потому что чувствует себя грязным.

Или яЯ хотел бы запустить мой субоболочку с точно такими же характеристиками, что и мой текущий.

Обновить

Хорошо, решения, использующие backtick, безусловно, работают, но мне часто приходится делать это, пока яЯ проверяю и изменяю вывод, поэтому яЯ бы предпочел, если бы был способ передать результат во что-то в конце.

грустное обновление

Ах,/dev/stdin вещь выглядела так красиво, но, в более сложном случае, это нет работа.

Итак, у меня есть это:

find . -type f -iname '*.doc' | ack -v '\.doc

Который обеспечивает все.doc файлы имеют расширение в нижнем регистре.

И который, кстати, может быть обработан сxargs, но это'суть не в этом.

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

Итак, когда я запускаю первый, этоСразу выйду, ничего не происходит.

| perl -pe 's/^((.*)\.doc)$/$1 $2.doc/i' | xargs -L1 git mv

Итак, когда я запускаю первый, этоСразу выйду, ничего не происходит.

| 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

Итак, когда я запускаю первый, этоСразу выйду, ничего не происходит.

Ответы на вопрос(9)

Ваш ответ на вопрос