我找不到如何修复sed
命令中的错误消息。我正在 Windows 10 上的 Ubuntu 上运行 shell 脚本(打开了适用于 Linux 的 Windows 子系统功能)。导致错误的行是这样的:
sed -i -e 's/ 841 bp//' Prot.fasta
Prot.fasta
file 是我从 shell 脚本生成的序列列表,每个序列如下所示:
>Emiliania_huxleyi_CCMP1516_tax280463_locID_jgi|Emihu1|426057|estExtDG_Genewise1PlusC_50194_seqID3655840 841 bp
------------------------------------------------------------
-----------------------------------MASARLAIEGRVERQPIFRRLRGSE
我只是想删除841 bp
每个序列末尾的部分。但是当我运行脚本时,上面的代码行给出了以下错误:
sed: preserving permissions for './sedSjMfzs': Operation not permitted
sed: cannot rename ./sedSjMfzs: Permission denied
谁能给我一些关于为什么我会收到此错误的建议?
答案1
sed -i
这是执行 ( )时发生的情况strace
:
openat(AT_FDCWD, "input", O_RDONLY) = 4
[...]
openat(AT_FDCWD, "./sedMSD2Zj", O_RDWR|O_CREAT|O_EXCL, 0600) = 5
[...]
rename("./sedMSD2Zj", "input") = 0
Windows NTFS 权限比 Linux 权限复杂得多。我对它们不熟悉,但似乎该用户被允许创建文件,但不能重命名它们。
答案2
您是否在子系统内对 Windows 文件运行此脚本?如果是这样,一个简单的修复可能是将文件移至 Ubuntu 子系统中,然后在完成后将它们移回。我认为这与 Hauke 的答案一致,因为您的 WSL 用户可能无权访问子系统并更改 Windows 文件。