シェルでcp -fが効かない

お久しぶです。
ここのところサボり気味で、全然更新できておらず…

気づけば、ワールドカップも終わり、ゴルフのメジャーも終わり、甲子園も終わり、、
夏が終わってしまった!!
気づけば9月! 9月ではないか。。
どれだけ更新サボってたんだか。
そんな時は、シェルスクリプトを作成した際に、cp -fでやってるのにうまくいかな時の話でもしましょうw
うん、それがいいね!

ということで、いくら -f指定して実行しても、上書きしても良い?って聞いてくるやつを黙らせる方法です(笑)

コマンドの詳細は割愛します。
cpはコピー。-fは強制実行です。
ですので、例えば
cp -f /tmp/test.txt /tmp/copy/
ってやると、/tmp/copy/配下にtest.txtがコピーされます。
コピー元の情報を保持したい時は、-pとか-aとか使います。ま、細かい話はいいとして。

で、だいたいこのcpがうまくいかない時は、権限の問題だったりします。
ですので、まずは実行ユーザーに、該当のディレクトリやファイルを操作する権限があるか確認してください。
単純に、シェル内ではなく、コマンドラインから実行して怒られるなら権限に問題があると思います。

コマンドで打って問題ないのに、シェルにすると、必ず「え、上書きしてもいい?」って聞いてくる場合があります。
いいんだよ! -f指定してるじゃん!
って思うんだけど、何度実行しても聞いてきます、当たり前ですがw

恐らく、それはcpコマンドにaliasが指定されているのだと思います。
つまり、cpと打っている時点で、cp -iなどのオプション付きで実行されるのです。
(-iは上書き時に必ず確認するオプションです)

llが、ls -lのaliasなのと同じですね。

で、このaliasがある以上、いくら抗ってもダメですw

もちろん、aliasを消せば良いのですが、それだと影響が大きいので、エスケープします。

¥cp -f /tmp/text.txt /tmp/copy/


といった感じで、頭に「¥」を付与します。
そうすることで、aliasで実行されることを回避できます。
何度もしつこく「ねっ、ねっ、上書きしていい? いいの?」って聞いてきたあいつもこれで黙ります(笑)

ちなみに、aliasの確認は、
aliasと打って確認するか、bashなどで設定されてたりします。
↓こんな感じ

#alias
alias ll='ls -l --color=auto'

てことで、今場所の相撲も今日から後半戦!!楽しみですね、って話でしたw
お疲れ様でしたー。

シェルでcp -fが効かない」への2件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です