ファイルへのリダイレクトで上書き設定を変更する

bash: requirements.txt: cannot overwrite existing fileと表示されたので上書きできるようにする。

発生

VSCodeのリモートコンテナでリビルドした時か分からないけれど、次のようなコマンドで出力をファイルにリダイレクトするとエラーが起こることがありました:

$ pip freeze > requirements.txt 
bash: requirements.txt: cannot overwrite existing file

原因

初心者的な問題で単にシェルの設定がいつの間にか変わってたというだけでした。

シェルのnoclobberという設定項目がonだとリダイレクトによる上書きが禁止になります。これがonに切り替わったために起こっていました。

イメージを変更したことで設定が変わったのが今回の原因だと思っています。VSCodeのpythonコンテナを使っていたのですが、VARIANT=3-bullseyeからVARIANT=3に修正したところ起こったような気がします。

対処

set +o noclobberで上書き禁止設定をoffにできます:

# 既存の設定の一覧をgrep
$ set -o | grep nocl
noclobber          on
# 上書き禁止を解除する
$ set +o noclobber
# 確認
$ set -o | grep nocl
noclobber          off

おわり

簡単なことだけど、コマンドは忘れそうなのでメモとして記録しました。

.devcontainerのディレクトリの中に、Use -bullseye variants on local arm64/Apple Silicon.という記述が見られるので、該当しない場合は--bullseyeは付与しない方がいいのでしょう。付与をやめてリビルドしたら上書き禁止設定が働くようになったと思います。

お手軽な軽量PC(物理)がほしいな。

参考

以上です。


Amazonアソシエイト(setコマンドの説明は8章にあります。購入したけどまだ届いてません。)

Bitly

コメント

タイトルとURLをコピーしました