我有示例文件: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
答案 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