0

私の問題は次のとおりです:私はこのbashスクリプトを持っています:

#!/bin/bash

 IFSBAK=$IFS
 if [ "$TXTEXT" = "" ]; 
 then
   CMD="find . -iname \"*.txt\" -or -iname \"*.text\""
 else
CMDTEMP="find . "
IFS=":"
for i in $TXTEXT
do
    CMDTEMP="${CMDTEMP} -iname \"*.${i}\" -or"
done
IFS=$IFSBAK
CMD=${CMDTEMP%-or}
 fi

 FILES=$(eval $CMD)
 OUTPUT=$1

 for f in $FILES
 do
VAR=$(grep -ae [a-zA-Z0-9] "$f" | tr -cs "[:alnum:]" "\n")
IFS=$' \n\t-?=!*][.\",();\'\`\´:'   
for v in $VAR
do
    echo $v >> "${OUTPUT}"
done
IFS=$' \n\t'
 done

このコードを C プログラム内に挿入する必要があります。すべてのスクリプトをシェルで直接テストして1行で書き直そうとしましたが、動作しますが、引用符で問題があり、system()呼び出しのパラメーターとして使用しようとしてエスケープしています。抜け道を教えてもらえますか?

ご協力ありがとうございました

4

3 に答える 3

4

単一のバイナリを配布する以外に選択肢がなく、シェル スクリプト ファイルをバイナリと共に出荷できない場合は、次のことを検討してください。

  1. スクリプトの内容を単一のリテラルに含める
  2. プログラムの実行中に、リテラルの内容を一時ファイルに出力します。一意のファイル名を考え出すには、おそらく何らかの戦略が必要です。
  3. call で一時スクリプトをsystem()呼び出す
  4. 一時ファイルを削除する

ただし、これは最後の手段と考えてください。

于 2011-04-01T18:54:20.443 に答える
3

これをシェル スクリプトに入れ、C コードからシェル スクリプトを呼び出します。私見を維持する方がはるかに簡単です。

于 2011-04-01T18:38:59.123 に答える
0
#define SHELLSCRIPT "
...
write your shell script code here
...
"



   int main()
    {

        system(SHELLSCRIPT);
        return 0;
        //put the bash to C program 
    }
于 2015-03-03T00:58:34.837 に答える