工作 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/~

SOME$PATH請注意,儘管這是一個看起來很有趣的單字元名稱,但從概念上講,這與您創建一個名為的檔案沒有什麼不同

touch 'SOME$PATH'

並嘗試透過執行以下操作來刪除它:

rm -i SOME$PATH

警告:變數 SOME$PATH 出於範例目的,此處未引用。通常它會用引號引起來 'SOME$PATH'

在這兩種情況下,shell 都會擴展您提供的名稱,您需要防止這種情況發生。

另外:不要用來rm -rf刪除檔案!其全部目的rm -r是告訴rm可以刪除目錄。如果您不想在嘗試刪除檔案時意外刪除整個目錄,請不要習慣性地通過-r

答案2

在上下文中單獨使用波浪號時,ls ~會將您的主目錄列出為 ~ 是您的主目錄的捷徑。如果您這樣做了ls ~brown,那麼您將列出 Brown 的主目錄的內容。

除非另有說明,VIM 將建立已更改檔案的備份副本:myFile myFile~。

這種行為很好,因為它創建了一個備份,但如果您不需要它,請添加到您的 .vimrc 檔案:設定不備份(我剛剛使用 訪問過vi ~/.vimrc)。

當然,正如其他人所說,如果您有一個名為 ~ 的文件,那麼只需將 char 轉義為 \~

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

這些是常用的轉義符 - 重置和初始化字串。不難想像,當互動式 shell 等待輸入時,鍵盤掉落或某種按鈕按下可能會導致~整個檔案系統中出現隨機截斷的檔案。至少,它偶爾會出現在我身上。

相關內容