Fiquei me perguntando como criar um arquivo nomeado como um sinalizador, por exemplo, se eu quisesse criar uma pasta chamada -a, quais comandos fariam o truque?
Eu tentei mkdir '-a', mkdir \-ae nem funcionou. Estou no Ubuntu.
Fiquei me perguntando como criar um arquivo nomeado como um sinalizador, por exemplo, se eu quisesse criar uma pasta chamada -a, quais comandos fariam o truque?
Eu tentei mkdir '-a', mkdir \-ae nem funcionou. Estou no Ubuntu.
Respostas:
Chame o comando da seguinte maneira:
mkdir -- -a
Os --meios que as opções terminam depois disso, então as -ainterpretações são literalmente e não como uma opção mkdir. Você encontrará essa sintaxe não apenas em mkdir, mas em qualquer utilitário compatível com POSIX, exceto echoe test. A partir da especificação :
O argumento - deve ser aceito como um delimitador indicando o final das opções. Quaisquer argumentos a seguir devem ser tratados como operandos, mesmo se começarem com o caractere '-'. O argumento - não deve ser usado como uma opção ou como um operando.
O uso --como salvaguarda é recomendado para quase todas as ações em que você lida com nomes de arquivos e deseja garantir que eles não quebrem o comando; por exemplo, ao mover arquivos em um loop, convém chamar o seguinte, para que um arquivo chamado -iisn ' t (in?) corretamente analisado como uma opção:
mv -- "$f" new-"$f"
cc -o -myfile -Wall -myfile.ccomo um exemplo apenas um pouco artificial. Qualquer editor que se preze deve ser capaz de salvar em um arquivo nomeado -myfile.cse você solicitar, mas o compilador C provavelmente não fará o que você deseja quando receber uma lista dessas opções.
cccomando que Michael deu acima, que tem a -oopção de especificar o arquivo de saída.
for f in ./*; do..., em vez defor f in *; do...
A maneira mais simples que deve funcionar com qualquer programa razoável é usar um nome de caminho relativo na frente do -, por exemplo mkdir ./-a, criará um diretório chamado -ano diretório de trabalho atual.
O exemplo mais comum de usar esse "truque" é quando você deseja remover um arquivo que começa com um traço, para que você possa fazê-lo rm ./-a.
./é sempre uma boa idéia - imagine que você tenha criado um arquivo chamado -rfe depois chamado rm *.
--não é compreendido por todos os comandos, apenas alguns)
--era uma coisa bash, por isso deve funcionar para todos os programas?
A razão pela qual mkdir '-a', ou mkdir \-anão funciona, é porque esses dois métodos (usando aspas ou barras invertidas) são usados para impedir que seu shell (provavelmente bash) lhes dê um significado especial. Como -anão significa nada de especial para o shell, isso não afeta a maneira como ele é repassado mkdir.
No que diz mkdirrespeito, ele recebe uma lista de argumentos do shell e não sabe se você os coloca entre aspas ou não, ou se houve uma barra invertida. Apenas vê um argumento -a. É por isso que você precisa do --explicado nas outras respostas.
Além da resposta do "slhck", há outro truque que às vezes funciona:
Coloque o nome do arquivo em questão em 2 conjuntos de qoutes (diferentes) como "'-a'"ou '"-a"'.
Se isso funciona ou não depende do programa, mas é um último recurso se o programa não suportar o --recurso POSIX .
O método POSIX é sempre preferido, pois é 100% confiável.
--para finalizar o processamento de opções também pressupõe que você não precisa de opções para seguir o nome do arquivo, o que nem sempre é o caso.
'-a'ou "-a", pelo menos em sistemas do tipo BSD