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

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

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

さて、以前、rm -rf ~作業ディレクトリから実行したところ、ホームディレクトリが完全に消去されてしまい、IT 部門に問い合わせる必要がありました。

二度とやりたくありません。同時に、次のことも知りたいのです。

  1. なぜ~作業ディレクトリに作成されるのでしょうか? 保存中に指が滑ったのでしょうか (:w!しかし、何が起こるのでしょうか:w~?!!)

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

delの代わりに使用する というバックアップ コマンドがありますrm -rf。これは、一時的な場所にデータを配置するだけです。これを使用して を削除することもできます~が、なぜこのようなことが起こるのか、また、どのように削除できるのかを知りたいのです。

答え1

引用するか:

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

または、ベース名だけではなくパスで参照することもできます。

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

見た目がおかしな1文字の名前であるにもかかわらず、これは概念的には次のようにして名前をつけたファイルを作成するのと何ら変わりないことに注意してくださいSOME$PATH

touch 'SOME$PATH'

そして、次のようにしてそれを削除しようとしました:

rm -i SOME$PATH

警告: 変数 SOME$PATH ここでは例として引用符で囲んでいません。通常は引用符で囲みます。 'SOME$PATH'

どちらの場合も、シェルは指定した名前を展開するので、それを防止する必要があります。

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

答え2

チルダを単独で使用した場合、ls ~~ はホーム ディレクトリへのショートカットであるため、ホーム ディレクトリが一覧表示されます。その場合、ls ~brownbrown のホーム ディレクトリの内容が一覧表示されます。

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

この動作はバックアップを作成するので良いのですが、バックアップが不要な場合は、.vimrc ファイルに次の行を追加します: set no backup (私は でアクセスしましたvi ~/.vimrc)。

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

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

答え3

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

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

infocmp -1出力の半分以上は~チルダ私のマシンではエスケープが機能しないのですが、そのほとんどが何をするのか理解できません。zsh少なくともほとんどの場合、エスケープされた文字列の部分は消費され、~チルダ

例えば、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>,

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

関連情報