web-dev-qa-db-ja.com

作業中のUNIXディレクトリ内のチルダ(〜)

それで、私はUNIX環境で働いていて、UNIXホームから数マイル離れた私の作業ディレクトリ内に~があることに気付きました。

さて、過去に一度、私は自分の作業ディレクトリからrm -rf ~を実行し、ホームディレクトリを完全に消去してしまい、ITに関与する必要がありました。

もう二度とやりたくない。同時に知りたい

  1. 作業ディレクトリに~が作成されるのはなぜですか?保存中の指のずれに問題がありますか(:w!ですが、:w~はどうなりますか?!!)

  2. チェックインする前に、p4が認識していない追加のファイルまたはフォルダーを検索するスクリプトがあるため、この~を定義すると問題が発生する可能性があります。では、~を作業ディレクトリから削除し、同時に家を消さないようにするにはどうすればよいですか?

rm -rfの代わりに使用するdelというバックアップコマンドがあります。一時的な場所にコンテンツを配置するだけです。それを使用して~を取り除くことができます。しかし、私はこれがなぜ起こるのか、そしてどのようにそれを取り除くことができるのかを知ることにもっと興味がありますか?

23
user73631

引用するか:

rm -i '~'
rm -i "~"
rm -i \~

または、ベース名だけでなくパスで参照します。

rm -i ./~
rm -i /path/to/~

おかしな一文字の名前であるにもかかわらず、これは概念的に、次のようにしてSOME$PATHという名前のファイルを作成した場合と同じです。

touch 'SOME$PATH'

そして、それを削除することを試みました:

rm -i SOME$PATH

警告:変数SOME$PATHここでは例のために引用されていません。通常は引用符で囲まれています'SOME$PATH'

どちらの場合も、シェルは指定した名前を拡張しており、それを防ぐ必要があります。

また、rm -rfを使用してファイルを削除しないでください。 rm -rの目的は、rmにディレクトリを削除しても問題ないことを伝えることです。ファイルの削除中にディレクトリ全体を誤って削除したくない場合は、-rを定期的に渡さないでください。

37
godlygeek

〜はホームディレクトリへのショートカットであるため、ls ~のコンテキストでティルダを単独で使用すると、ホームディレクトリがリストされます。 ls ~brownを実行した場合は、brownのホームディレクトリの内容を一覧表示します。

VIMは、特に指示がない限り、変更されたファイルmyFile myFile〜のバックアップコピーを作成します。

この動作はバックアップを作成するので適切ですが、必要ない場合は.vimrcファイルに追加してください:バックアップを設定しないでください(私はvi ~/.vimrcでアクセスしただけです)。

そしてもちろん、他の人が言ったように、〜というファイルがある場合は、文字を\〜としてエスケープするだけです

me 217 % vi this      (saved as :w~)
me 218 % ls
this  ~
me 219 % cat \~
kfdkdfk
me 220 % \rm \~
me 221 % ls
this
1
user2592248

これはタイプミスの影響を受ける可能性があります。 TERM=xterm構成が私のようなものである場合、キーボードのほぼすべてのファンクションキーが次のようなエスケープシーケンスを送信します...

infocmp -1 | grep -n \~ | tail -n3
138:    kich1=\E[2~,
141:    knp=\E[6~,
142:    kpp=\E[5~,

infocmp -1の出力の半分以上が~tildeエスケープを私のマシンで含んでいます-そして私はそれらのほとんどが何をしているのか理解するのに途方に暮れています。 zshは、ほとんどの場合、少なくとも実際には文字列のエスケープされた部分を食べ、~tildeのみを残すことを知っています。

たとえば、echo、次に<space>と入力すると、F6<return>と出力されます...

/home/mikeserv

送信される実際のエスケープシーケンスは...

kf6=\E[17~

興味深いことに、>文字を含むこれらの他のエスケープシーケンスがあります。

infocmp -1 | grep \>
is2=\E[!p\E[?3;4l\E[4l\E>,
rmkx=\E[?1l\E>,
rs2=\E[!p\E[?3;4l\E[4l\E>,

これらは一般的に使用されるエスケープです-リセットおよび初期化文字列。対話型シェルが入力を待機しているときにキーボードのドロップや何らかのボタンのスマッシュにより、ファイルシステム全体でランダムに切り捨てられた~ファイルが発生することを想像するのは難しくありません。少なくとも、それは時々私の物に現れます。

0
mikeserv