工作 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 等待输入时,键盘掉落或某种按钮按下可能会导致~整个文件系统中出现随机截断的文件。至少,它偶尔会出现在我的身上。

相关内容