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 程序中。我试图在一行上重新编写所有脚本,直接使用 shell 对其进行测试并且它可以工作,但是我遇到了引号和转义问题,试图将其用作 system() 调用的参数。你能给我一个出路吗?

谢谢您的帮助

4

3 回答 3

4

如果您真的别无选择,只能交付单个二进制文件,并且无法随二进制文件一起发布 shell 脚本文件,请考虑以下事项:

  1. 在单个文字中包含脚本的内容
  2. 在程序执行期间,将文字的内容打印到临时文件中。您可能需要一些策略来提出一个唯一的文件名。
  3. system()通过call 调用临时脚本
  4. 删除临时文件

但是,请将此视为最后的手段。

于 2011-04-01T18:54:20.443 回答
3

将其放入 shell 脚本并从 C 代码调用 shell 脚本。更容易维护恕我直言。

于 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 回答