Запуск команды с использованием XARG - PullRequest
0 голосов
/ 25 июня 2011

У меня есть пример файла: test_file

//--- Test File--
**RUN_THIS
RUN_THIS00
RUN_THIS01
DONT_RUN00
DONT_RUN00
RUN_THIS02**

, где RUN_THIS* & DONT_RUN* - команды. Я хотел бы запускать только команды RUN_THIS из test_file без редактирования файла. Я ищу вариант как

cat test_file | grep RUN_THIS | xargs  {Some option to be provided to run run_this}

Я не могу запустить новую оболочку

Ответы [ 3 ]

0 голосов
/ 04 августа 2011
eval `grep RUN_THIS test_file`

Обратите внимание также на предотвращение бесполезного использования кошки.

На самом деле, вам может потребоваться добавить точку с запятой в конец каждой команды в test_file или заменить grep на что-то, что добавляет необходимые точки с запятой.

eval `awk '/RUN_THIS/ { print; print ";" }'`

Я не уверен, что понимаю требование не запускать новую оболочку. Под капотом обратные команды запускают подоболочку, поэтому это может нарушить это требование (но в конечном итоге каждая внешняя команда запускает новый процесс, который запускается как ответвление текущего процесса оболочки при запуске сценария оболочки). Если вы боитесь последствий для безопасности, вам все равно не следует использовать сценарий оболочки.

0 голосов
/ 30 августа 2011

Для запуска новых оболочек вам необходимо включить в команду «ksh».

В простейшем виде

RUN_THIS00='ls'
echo $RUN_THIS00 | ksh
0 голосов
/ 25 июня 2011

Что-то вроде этого возможно?

for cmd in $(grep RUN_THIS < test_file); do
    $cmd --some-option-to-be-provided-to-run-this
done

Это должно работать нормально, если в командах test_file.

нет пробелов.
...