
sed
コマンドでエラーメッセージを修正する方法が見つかりません。 Windows 10(Linux用のWindowsサブシステム機能がオンになっている)のUbuntuでシェルスクリプトを実行しています。エラーを引き起こす行は次のとおりです。
sed -i -e 's/ 841 bp//' Prot.fasta
Prot.fasta
ファイルはシェルスクリプトによって生成されたシーケンスのリストで、各シーケンスは次のとおりです。
>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サブシステムに移動し、完了したら再度移動することです。 WSLユーザーがサブシステムにアクセスし、Windowsファイルを変更する権限がない可能性があるという点で、これはHaukeの答えと一致すると思います。