[注: これに似たQ は同じbashエラーメッセージに関するものです。 this other Q の重複としてマークされています。しかし、このエラーの非常に異なる原因を見つけたので、以下の自分のQに答えます。]
この以前は機能していたbashスクリプト行
while ... do ... done <<< "$foo"
ある日、このエラーメッセージが生成され始めました:
ヒアドキュメントの一時ファイルを作成できません:権限が拒否されました
追加しましたumask 777
ヒア文字列の前。 umaskを削除した後、エラーはなくなりました。教訓:ヒア文字列(<<<
)、これはヒアドキュメントに関連しています(<<
)、これらが機能するためには適切なumaskセットが必要です。
私の場合、/tmp
ディレクトリのデフォルトの権限を変更しました(誤って0777に変更したと思います)。
解決策は、それをデフォルトの/tmp
権限に戻すことでした。これは、8進数で1777(1 =スティッキービット、7 = R + W + X)です。
つまり、Sudo chmod -R 1777 /tmp
は問題を解決する必要があります。
この問題に関する私の個人的な経験は、@ eliptical-viewと同じように、umask
バイナリ表記でした。私はそれを書いているはずだ:
umask 0644
私が作成したファイルへの読み取りおよび書き込みアクセス権を私に与えます、何が問題なのですか
umask
を
umask 0022
エラーは消えた。
実際には、バイナリ表記はバイナリ補数として理解されるべきです。
したがって、下のumask
のマスクで0
ファイル所有者の場合、このユーザーは自分が作成したファイルに完全にアクセスできます。値 2
は、2番目のビットがマスクされていることを意味します。この場合、デフォルトでは、他のユーザーは、ファイル所有者が作成したファイルへの書き込みを許可されません。