我有一个函数可以读取文件,并在特定行执行文件中该行上的命令。在我尝试将 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
我做错了什么?
谢谢!
答案 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