0

サンプルファイルがあります: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}

新しいシェルを起動できません

4

3 に答える 3

0
eval `grep RUN_THIS test_file`

猫の無用な使用の回避にも注意してください。

実際には、の各コマンドの最後にセミコロンを追加するか、必要なセミコロンを追加するものにtest_file変更するgrep必要がある場合があります。

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

新しいシェルを開始しないという要件を理解しているかどうかはわかりません。内部的には、バックティックはサブシェルを実行するため、これはその要件に違反する可能性があります(ただし、最終的には、すべての外部コマンドが新しいプロセスを開始します。これは、シェルスクリプトを実行すると、現在のシェルプロセスのフォークとして開始されます)。セキュリティへの影響が怖い場合は、とにかく、そもそもシェルスクリプトを使用するべきではありません。

于 2011-08-04T13:11:33.060 に答える
0

もしかしてこういうこと?

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

のコマンドにスペースが含まれていない限り、問題なく動作するはずtest_fileです。

于 2011-06-25T05:06:33.240 に答える
-1

新しいシェルを実行するには、コマンドに「ksh」を組み込む必要があります。

最も単純な形で

RUN_THIS00='ls'
echo $RUN_THIS00 | ksh
于 2011-08-30T05:41:49.577 に答える