Como gravar em um diretório com o nome “-”? [duplicado]

7

Eu tentei cd em um diretório chamado - que criei para experimentar. Eu não consegui de Bash. Como faço para isso?

Com o Nautilus no Ubuntu 13.10 Eu poderia facilmente fazer isso e até mesmo criar arquivos dentro dele sem esforço. Fiz uma pesquisa no Google e aqui é o que eu tenho. Isso abrange o caso quando os diretórios iniciam com - , como -test , mas não é o caso quando o nome inteiro é um único - . Mesmo rm não funciona, embora eu possa excluí-lo do Nautilus.

cat test.txt >- copia o texto de test.txt para um arquivo chamado - , mas cat - >test2.txt faz o que faria em circunstâncias normais, ou seja, copia a entrada de stdin para test2.txt , não do arquivo - .

Por que o Nautilus não tem problemas com isso, mas o bash faz?

    
por Ankit Pati 30.12.2013 / 04:57

1 resposta

15

Uso:

cd ./-

Ou:

cd /absolute/path/leading/to/-

Ou melhor:

mv ./- something-sensible
cd something-sensible

O traço solitário é usado por muitos comandos para significar 'entrada padrão' ou 'saída padrão'. Alguns comandos podem ser persuadidos a levar um traço solitário à entrada padrão e outro à saída padrão em uma única chamada de comando: por exemplo, com o GNU Tar, tar -cf - -T - lê a lista de nomes de arquivos para arquivar a partir da entrada padrão ( -T - ) e grava o arquivo tar na saída padrão ( -f - ). Esses comandos nunca verificam se existe um arquivo real chamado - ; eles apenas comparam o nome com - e o tratam como o fluxo de E / S padrão apropriado. Você contorna o problema da mesma maneira: use um nome como ./- para especificar o arquivo.

Você também pode observar que um nome -- (traço duplo) também causa problemas porque o argumento de traço duplo é usado para separar opções dos argumentos de nome de arquivo (não-opção), como em:

rm -fr -- -

Isso removeria o arquivo ou diretório - , mas deixaria o arquivo (ou diretório) -- inalterado. Estude a especificação das Convenções de Utilidade POSIX do POSIX para ver onde esse comportamento é definido.

    
por 30.12.2013 / 04:58