Tilde (~) im Unix-Arbeitsverzeichnis

Tilde (~) im Unix-Arbeitsverzeichnis

Ich arbeite in einer UNIX-Umgebung und habe bemerkt, dass sich in meinem Arbeitsverzeichnis, das meilenweit von meinem UNIX-Heimverzeichnis entfernt ist, ein befindet ~.

Ich habe dies in der Vergangenheit einmal rm -rf ~von meinem Arbeitsverzeichnis aus getan und dabei mein Home-Verzeichnis vollständig gelöscht und musste die IT-Abteilung einschalten.

Ich möchte es nicht noch einmal tun. Gleichzeitig möchte ich wissen:

  1. Warum wird ~in meinem Arbeitsverzeichnis erstellt? Ist es ein fehlerhafter Fingerabrutscher beim Speichern ( :w!aber was passiert denn :w~?!!)

  2. Vor dem Einchecken sucht ein Skript nach zusätzlichen Dateien oder Ordnern, die p4 nicht kennt. Dies ~kann also zu Problemen führen. Wie kann ich sie ~aus meinem Arbeitsverzeichnis entfernen, ohne gleichzeitig mein Home-Verzeichnis zu löschen?

Ich habe einen Backup-Befehl namens , delden ich anstelle von verwende rm -rf. Er speichert die Daten nur an einem temporären Ort. Ich könnte ihn verwenden und die entfernen ~, aber ich möchte lieber wissen, warum das passiert und wie ich es entfernen kann.

Antwort1

Zitieren Sie es entweder:

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

Oder referenzieren Sie es über einen Pfad statt nur über einen Basisnamen:

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

Beachten Sie, dass dies, obwohl es sich um einen merkwürdig aussehenden Namen mit einem einzigen Zeichen handelt, konzeptionell nicht anders ist, als wenn Sie eine Datei mit dem Namen erstellt hätten, SOME$PATHindem Sie

touch 'SOME$PATH'

Und habe versucht, es wie folgt zu entfernen:

rm -i SOME$PATH

(Achtung: die Variable SOME$PATH wird hier aus Gründen des Beispiels nicht zitiert. Normalerweise würde es in Anführungszeichen gesetzt werden 'SOME$PATH' )

In beiden Fällen erweitert die Shell den von Ihnen eingegebenen Namen und das müssen Sie verhindern.

Außerdem: Verwenden Sie es nicht, rm -rfum eine Datei zu entfernen! Der einzige Zweck von rm -rbesteht darin, anzugeben, rmdass das Entfernen von Verzeichnissen zulässig ist. Wenn Sie beim Versuch, Dateien zu entfernen, nicht versehentlich ganze Verzeichnisse entfernen möchten, verwenden Sie nicht regelmäßig -r!

Antwort2

Wenn die Tilde allein im Kontext verwendet wird, ls ~wird Ihr Home-Verzeichnis aufgelistet, da ~ eine Abkürzung zu Ihrem Home-Verzeichnis ist. Wenn Sie ls ~browndies tun, wird der Inhalt von Browns Home-Verzeichnis aufgelistet.

Sofern nicht anders angegeben, erstellt VIM eine Sicherungskopie einer geänderten Datei: myFile myFile~.

Dieses Verhalten ist gut, da dadurch eine Sicherungskopie erstellt wird. Wenn Sie dies jedoch nicht möchten, fügen Sie Ihrer .vimrc-Datei Folgendes hinzu: „set no backup“ (auf das ich gerade mit zugegriffen habe vi ~/.vimrc).

Und natürlich, wie andere bereits sagten, wenn Sie eine Datei mit dem Namen ~ haben, maskieren Sie das Zeichen einfach als \~

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

Antwort3

Dies könnte durch Tippfehler verursacht werden. Wenn Ihre TERM=xtermKonfiguration meiner ähnelt, sendet praktisch jede Funktionstaste auf Ihrer Tastatur Escape-Sequenzen wie ...

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

Mehr als die Hälfte der Produktion infocmp -1enthält~TildeEscapes auf meiner Maschine - und ich verstehe nicht, was die meisten davon tun. Ich weiß, dass zshzumindest in den meisten Fällen der Escape-Teil der Zeichenfolge tatsächlich aufgefressen wird - und nur der~Tilde.

Wenn Sie beispielsweise echothen eingeben,<space>dann F6und<return>druckt...

/home/mikeserv

Die tatsächlich gesendete Escape-Sequenz ist ...

kf6=\E[17~

Interessanterweise gibt es noch weitere dieser Escape-Sequenzen, die >Zeichen enthalten.

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>,

Dabei handelt es sich um häufig verwendete Escape-Befehle – Reset- und Initialisierungszeichenfolgen. Es ist nicht schwer, sich vorzustellen, dass ein Tastendruck oder ein anderer Tastendruck, während eine interaktive Shell auf eine Eingabe wartet, dazu führen kann, dass ~in Ihrem gesamten Dateisystem zufällig abgeschnittene Dateien auftreten. Zumindest passiert das bei mir gelegentlich.

verwandte Informationen