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

22

Então, estou trabalhando em um ambiente UNIX e notei que dentro do meu diretório de trabalho, que fica a milhas de distância da minha casa UNIX, existe um ~ .

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

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

  1. Por que ~ foi criado no meu diretório de trabalho? É um erro de digitação ao salvar ( :w! , mas o que acontece é :w~ ? !!)

  2. Antes do check-in, há um script que procura arquivos ou pastas extras que a p4 não está ciente, portanto, def% this ~ pode causar um problema. Então, como posso remover o ~ do meu diretório de trabalho e, ao mesmo tempo, não apagar minha casa?

Eu tenho um comando de backup chamado del que eu uso em vez de rm -rf . Apenas coloca 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?

    
por user73631 26.06.2014 / 00:13

3 respostas

36

Cite-o:

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

Ou referenciá-lo por um caminho, em vez de apenas um nome de base:

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

Note que, apesar de ser um nome de personagem único de aspecto engraçado, isto não é conceitualmente diferente do que se você tivesse criado um arquivo chamado SOME$PATH fazendo

touch 'SOME$PATH'

E tentou removê-lo fazendo:

rm -i SOME$PATH

( Atenção: a variável SOME$PATH não é citada para o exemplo aqui. Normalmente, seria colocada entre aspas 'SOME$PATH' )

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

Além disso: não use rm -rf para remover um arquivo! Todo o propósito para rm -r é informar rm , é OK remover diretórios. Se você não quiser remover acidentalmente diretórios inteiros ao tentar remover arquivos, não passe habitualmente -r !

    
por 26.06.2014 / 00:23
1

O til quando usado sozinho no contexto de ls ~ irá listar seu diretório home como ~ é um atalho para o seu diretório home. Se você fez ls ~brown , então você irá listar o conteúdo da pasta home 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, pois cria um backup, mas se você não quiser, adicione a você o arquivo .vimrc: set no backup (que acabei de acessar com vi ~/.vimrc ).

E claro, como outros disseram, se você tem um arquivo chamado ~ então simplesmente escape do caracter como \ ~

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

Isso pode ser feito por neblina. Se o seu TERM=xterm config for parecido com o meu, praticamente todas as teclas de função do seu 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 saída de infocmp -1 contém ~ tilde escapa na minha máquina - e não consigo entender o que a maioria deles faz. Eu sei que zsh , na verdade, come a porção de escape da string na maioria dos casos - e deixa apenas o ~ til .

Por exemplo, digitando echo , em seguida, <space> , então F6 e <return> imprime ...

/home/mikeserv

A seqüência de escape real enviada é ...

kf6=\E[17~

Curiosamente, há outras dessas 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>,

Essas são as fugas comumente usadas - redefinir e seqüências de inicialização. Não é difícil imaginar que um teclado perdido ou uma quebra de botão de algum tipo, quando um shell interativo está aguardando entrada, possa resultar em arquivos ~ truncados aleatoriamente que ocorrem em todo o sistema de arquivos. Pelo menos, ocasionalmente aparece na minha.

    
por 28.05.2015 / 03:54