使用sed
,我尝试替换值 0.1.233 ...。在命令行上没有问题;可以。但是,将此命令放入外壳脚本时,出现错误:
sed: couldn't open temporary file ../project/cas-dp-ap/sedwi3jVw: Permission denied
我不知道此sedwi临时文件的来源。
您是否知道为什么我有此临时文件以及如何传递它?
$(sed -i "s/$current_version/$version/" $PATHPROJET$CREATE_PACKAGE/Chart.yaml)
++ sed -i s/0.1.233/0.1.234/ ../project/cas-dp-ap/Chart.yaml
sed: couldn't open temporary file ../project/cas-dp-ap/sedwi3jVw: Permission denied
+ printf 'The version has been updated to : 0.1.234 \n\n \n\n'
The version has been updated to : 0.1.234
+ printf '***********************************'
答案 0 :(得分:1)
正确的语法在命令行和脚本中相同。如果在提示符下使用$(...)
,那么您将收到相同的错误。
sed -i "s/$current_version/$version/" "$PATHPROJET$CREATE_PACKAGE/Chart.yaml"
(注意文件名周围的引号。您的私有变量可能使用小写)。
语法
$(command)
从command
获取输出,并尝试将其作为命令执行。通常,您将使用称为command substitution的此构造将命令的输出内插到字符串中,例如
echo "Today is $(date)"
(尽管date +"Today is %c"
可能是做这件事的更好方法)。
答案 1 :(得分:1)
sed -i
是“就地编辑”。但是,“就地”并不是真的。发生的情况更像是:
例如,如果我们查看一个已编辑文件的索引节点,我们可以看到它在sed运行后已被更改:
$ echo hello > a
$ ln a b
$ ls -lai a b
19005916 -rw-rw-r-- 2 jhnc jhnc 6 Jan 31 12:25 a
19005916 -rw-rw-r-- 2 jhnc jhnc 6 Jan 31 12:25 b
$ sed -i 's/hello/goodbye/' a
$ ls -lai a b
19005942 -rw-rw-r-- 1 jhnc jhnc 8 Jan 31 12:25 a
19005916 -rw-rw-r-- 1 jhnc jhnc 6 Jan 31 12:25 b
$
这意味着您的脚本必须能够在进行“就地”编辑的文件夹中创建文件。