我有一个包含函数sedstr:
的文件sedstr.sh#!/bin/bash
function sedstr {
# From stackoverflow.com/a/29626460/633251 (Thanks Ed!)
old="$1"
new="$2"
file="${3:--}"
escOld=$(sed 's/[^^]/[&]/g; s/\^/\\^/g' <<< "$old")
escNew=$(sed 's/[&/\]/\\&/g' <<< "$new")
sed -i.tmp "s/\<$escOld\>/$escNew/g" "$file" # added -i.tmp
echo "sedstr done"
}
我有一个外部文件“test”,可以使用以下内容进行编辑:
My last name is Han.son and I need help.
If the makefile works, I'll have a new last name.
我想用makefile中的参数调用sedstr函数。不应返回任何内容,但应编辑外部文件。这是一个不起作用的小makefile:
all: doEdit
doEdit:
$(shell ./sedstr.sh) # I was hoping this would bring the function into the scope, but nay
$(shell sedstr 'Han.son', 'Dufus', test)
如何使用makefile中的变量调用此函数?错误是:
make: sedstr: Command not found
make: Nothing to be done for `all'.
答案 0 :(得分:2)
make配方中的每一行都在自己的shell中执行。
同样,每次调用$(shell)
也是如此。
他们不分享国家。
要做你想做的事,我们需要一个
的食谱线$(shell . ./sedstr.sh; sedstr 'Han.son' 'Dufus' test)
这就是说没有理由在这里使用$(shell)
因为你已经在shell上下文中了,因为你可以很容易地(并且更正确地)使用配方行的
. ./sedstr.sh; sedstr 'Hans.son' 'Dufus' test
是的,原文中的逗号是不正确的。
答案 1 :(得分:1)
您可以从sedstr.sh内部调用该函数。最后
sedstr "$1" "$2" "$3"
EDIT 或者看其他答案