Linux 对临时文件的sed权限被拒绝
使用Linux 对临时文件的sed权限被拒绝,linux,bash,shell,Linux,Bash,Shell,使用sed我尝试替换值0.1.233。。。在命令行上没有问题;但是,将此命令放入shell脚本时,会出现错误: sed: couldn't open temporary file ../project/cas-dp-ap/sedwi3jVw: Permission denied 我不明白这个临时sedwi文件是从哪里来的 你知道我为什么有这个临时文件,以及如何传递它吗 $(sed -i "s/$current_version/$version/" $PATHPROJET$CREATE_PAC
sed
我尝试替换值0.1.233。。。在命令行上没有问题;但是,将此命令放入shell脚本时,会出现错误:
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 '***********************************'
正确的语法在命令行和脚本中是相同的。如果在提示时使用了
$(…)
,则会收到相同的错误
sed -i "s/$current_version/$version/" "$PATHPROJET$CREATE_PACKAGE/Chart.yaml"
(请注意文件名周围的引号。您的私有变量可能应该使用小写。)
语法
$(command)
从命令
获取输出,并尝试将其作为命令执行。通常,您会使用这个构造(称为a)将命令的输出插入到字符串中,如
echo "Today is $(date)"
(虽然date+“今天是%c”
可能是做这件事的更好方法)。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
$
这意味着您的脚本必须能够在进行“就地”编辑的文件夹中创建文件。
sed-i
将尝试创建临时文件。您是否可以检查您是否对尝试创建此临时文件的文件夹具有写入权限?+1用于显示调试输出。