0

I want to use sed for replacing multiple files from bash script.

When I call it from bash I get below error

DEBUG FLOW:-

FILELIST='/tmp/components/ab.sql /tmp/b.sql'
+ SUBSTITUTE_STRING=abc
+ sed -i.bak -e s/abc/xyz/g '/tmp/components/ab.sql /tmp/b.sql': No such file or directory

however when I used this command directly on terminal it executes successfully

sed -i.bak -e s/abc/xyz/g /tmp/components/ab.sql /tmp/b.sql

The difference from terminal and script is of quotes around the file.

I have tried defining File list variable without quotes as well

kindly suggest

4

1 に答える 1

1

言う代わりに:

FILELIST='/tmp/components/ab.sql /tmp/b.sql'

次のように言って配列にします。

FILELIST=(/tmp/components/ab.sql /tmp/b.sql)

呼び出し中に次のように言います。

sed -i.bak -e "s/abc/xyz/g" "${FILELIST[@]}"

デバッグ フローを見ると、シェルがファイル名を単一のトークン ( '/tmp/components/ab.sql /tmp/b.sql') として解析し、No such file or directoryエラーが発生することが明らかです。

于 2013-11-14T09:52:41.743 に答える