从bash脚本调用时,Sed命令无法正确执行,并且在从提示符调用时工作正常

时间:2015-02-12 22:27:41

标签: linux bash sed

我有一个函数可以读取文件,并在特定行执行文件中该行上的命令。在我尝试将 sed 命令添加到一行之前,该功能似乎正常工作,然后我遇到了麻烦。当 sed 命令执行时,我看到以下错误:

sed: -e expression #1, char 1: unknown command `''

在我执行命令的文件中,sed表达式为:

sed -i 's# libcrypto.a##;s# libssl.a##' Makefile

首先,我认为可以按照here的说明解决问题。但是,在尝试将文件中的行重写为bash -c "sed -i 's# libcrypto.a##;s# libssl.a##' Makefile"后,我收到以下错误:

-i: -c: line 0: unexpected EOF while looking for matching `"'
-i: -c: line 1: syntax error: unexpected end of file

应该在文件中执行这些行的函数如下所示:

OLD_IFS=$IFS
IFS=$'\n'
LABEL=($( cat /etc/file/containing/lines/to/execute ))
IFS=$OLD_IFS

for ((i=3; i <= $((${#LABEL[@]} - 1)); i++)); do # Start at i=3 to avoid three lines of comments at the beginning of the file.
    . . .
    if [[ "${LABEL[i]}" == some criteria ]]; then
        exec ${LABEL[i]} &> /dev/null &
    fi
done

我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:2)

我有两个解决方案。

第一个,在你的文件中写

sed -i s#libcrypto.a##;s#libssl.a## Makefile

没有顶点,没有空格,在编辑过的Makefile中,你会得到两个无瑕,我的意思是无害的,额外的空间。

第二个是修改你的函数,一个从文件执行行的函数,并使用eval $line而不是简单地使用$line(我的猜测是你的函数从文件中读取一行,将结果存储在变量line中,如

while read line ; do
    ...
done < the_file_with_the_sed_command