linux - 临时文件的 sed 权限被拒绝
问题描述
随着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
是“就地编辑”。然而,“就地”并不是真的。发生的事情更像是:
- 创建一个临时文件
- 在原始文件上运行 sed 并将更改放入临时文件
- 删除原始文件
- 将临时文件重命名为原始文件
例如,如果我们查看已编辑文件的 inode,我们可以看到它在 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
$
这意味着您的脚本必须能够在执行“就地”编辑的文件夹中创建文件。
推荐阅读
- elasticsearch - 弹性搜索没有为 1 个字段搜索提供正确的结果
- reactjs - Gatsby with Apollo 在查询中未定义时给出错误作为客户端
- shell - 在 C Shell 中执行时获取脚本路径
- typescript - 为什么直接类型转换在 Typescript 中不起作用
- android - ConstraintLayout 随着 TableLayout 中的表行数的增加而扩展
- botframework - 如何使用元数据并自动训练知识库 C# QnA maker Bot
- jvm - java进程cpu使用率100%高,但根本没有请求,重启后进程恢复正常。
- swift - 导航栏渐变背景图像在不同的模拟器设备上不统一?
- monaco-editor - “Escape”键事件传播
- solr - Solr multi core join with Spatial Search