%20dentro%20do%20diret%C3%B3rio%20unix%20de%20trabalho.png)
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:
Por que é
~
criado no meu diretório de trabalho? É um deslize defeituoso ao salvar (:w!
mas o que acontece é:w~
?!!)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 del
que 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$PATH
fazendo
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 -rf
para remover um arquivo! O objetivo principal rm -r
é informar rm
que 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 ~brown
isso, 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=xterm
configuraçã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 -1
contém~
tilescapa na minha máquina - e não consigo entender o que a maioria deles faz. Eu sei que zsh
pelo menos come a parte que escapou da string na maioria dos casos - e deixa apenas a parte~
til.
Por exemplo, digitando echo
then<space>
então F6
e<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.