Til (~) dentro do diretório unix de trabalho

Til (~) dentro do diretório unix de trabalho

Estou trabalhando em um ambiente UNIX e percebi que dentro do meu diretório de trabalho, que fica a quilômetros e quilômetros de distância da minha casa UNIX, existe um arquivo ~.

Agora, uma vez no passado, fiz isso rm -rf ~no meu diretório de trabalho e acabei apagando completamente meu diretório inicial e tive que envolver a TI.

Eu não quero fazer isso de novo. Ao mesmo tempo, quero saber:

  1. Por que é ~criado no meu diretório de trabalho? É um deslize defeituoso ao salvar ( :w!mas o que acontece é :w~?!!)

  2. Antes de fazer check-in, há um script que procura arquivos ou pastas extras que o p4 não conhece, portanto isso ~pode causar um problema. Como posso remover ~do meu diretório de trabalho e ao mesmo tempo não apagar minha casa?

Eu tenho um comando de backup chamado delque uso em vez de rm -rf. Ele apenas coloca as coisas em um local temporário. Eu poderia usar isso e me livrar do ~, mas estou mais interessado em saber por que isso acontece e como posso removê-lo.

Responder1

Ou cite:

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

Ou referencie-o por um caminho, em vez de apenas um nome de base:

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

Observe que, apesar de ser um nome de caractere único e engraçado, isso não é conceitualmente diferente de se você tivesse criado um arquivo nomeado SOME$PATHfazendo

touch 'SOME$PATH'

E tentei removê-lo fazendo:

rm -i SOME$PATH

(Aviso: a variável SOME$PATH não é citado aqui para fins de exemplo. Normalmente seria colocado entre aspas 'SOME$PATH' )

Em ambos os casos, o shell está expandindo o nome fornecido e você precisa evitar isso.

Além disso: não use rm -rfpara remover um arquivo! O objetivo principal rm -ré informar rmque não há problema em remover diretórios. Se você não deseja remover acidentalmente diretórios inteiros ao tentar remover arquivos, não passe habitualmente -r!

Responder2

O til, quando usado sozinho no contexto de, ls ~listará seu diretório inicial como ~ é um atalho para seu diretório inicial. Se você fez ls ~brownisso, listará o conteúdo do diretório inicial do brown.

O VIM, salvo indicação em contrário, criará uma cópia de backup de um arquivo alterado: myFile myFile~.

Esse comportamento é bom porque cria um backup, mas se você não quiser, adicione ao seu arquivo .vimrc: set no backup (que acabei de acessar com vi ~/.vimrc).

E, claro, como outros disseram, se você tiver um arquivo chamado ~, simplesmente escape do caractere como \~

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

Responder3

Isso pode ser afetado por erros de digitação. Se a sua TERM=xtermconfiguração for parecida com a minha, praticamente todas as teclas de função do teclado enviarão sequências de escape como...

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

Mais da metade da produção de infocmp -1contém~tilescapa na minha máquina - e não consigo entender o que a maioria deles faz. Eu sei que zshpelo menos come a parte que escapou da string na maioria dos casos - e deixa apenas a parte~til.

Por exemplo, digitando echothen<space>então F6e<return>estampas...

/home/mikeserv

A sequência de escape real enviada é...

kf6=\E[17~

Curiosamente, existem outras sequências de escape que contêm >caracteres.

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

Esses são escapes comumente usados ​​- strings de redefinição e inicialização. Não é difícil imaginar que uma queda no teclado ou algum tipo de pressionamento de botão quando um shell interativo está aguardando entrada possa resultar na ~ocorrência de arquivos truncados aleatoriamente em todo o sistema de arquivos. Pelo menos, ocasionalmente surge no meu.

informação relacionada