使用XARG运行命令

时间:2011-06-25 05:01:14

标签: command-line sh xargs

我有示例文件:test_file

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

RUN_THIS*& DONT_RUN*是命令。 我想在不编辑文件的情况下只运行test_file中的RUN_THIS命令。 我正在寻找像

这样的选项
cat test_file | grep RUN_THIS | xargs  {Some option to be provided to run run_this}

我无法启动新shell

3 个答案:

答案 0 :(得分:0)

或许这样的事情?

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

只要test_file中的命令中没有空格,这应该可以正常工作。

答案 1 :(得分:0)

eval `grep RUN_THIS test_file`

还要注意避免无用的猫。

实际上,您可能需要在test_file中的每个命令的末尾添加分号,或者将grep更改为添加必要分号的内容。

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

我不确定我是否理解不启动新shell的要求。在引擎盖下,反引号运行子shell,因此这可能违反了该要求(但最终每个外部命令都会启动一个新进程,当您运行shell脚本时,该进程将作为当前shell进程的分支开始)。如果您害怕安全问题,那么无论如何都不应该首先使用shell脚本。

答案 2 :(得分:-1)

要运行新的shell,您需要在命令中加入“ksh”。

最简单的形式

RUN_THIS00='ls'
echo $RUN_THIS00 | ksh