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 \-a
e 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 \-a
e nem funcionou. Estou no Ubuntu.
Respostas:
Chame o comando da seguinte maneira:
Os
--
meios que as opções terminam depois disso, então as-a
interpretações são literalmente e não como uma opçãomkdir
. Você encontrará essa sintaxe não apenas emmkdir
, mas em qualquer utilitário compatível com POSIX, excetoecho
etest
. A partir da especificação :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-i
isn ' t (in?) corretamente analisado como uma opção:fonte
cc -o -myfile -Wall -myfile.c
como um exemplo apenas um pouco artificial. Qualquer editor que se preze deve ser capaz de salvar em um arquivo nomeado-myfile.c
se você solicitar, mas o compilador C provavelmente não fará o que você deseja quando receber uma lista dessas opções.cc
comando que Michael deu acima, que tem a-o
opçã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 exemplomkdir ./-a
, criará um diretório chamado-a
no 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
.fonte
./
é sempre uma boa idéia - imagine que você tenha criado um arquivo chamado-rf
e depois chamadorm *
.--
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'
, oumkdir \-a
não funciona, é porque esses dois métodos (usando aspas ou barras invertidas) são usados para impedir que seu shell (provavelmentebash
) lhes dê um significado especial. Como-a
não significa nada de especial para o shell, isso não afeta a maneira como ele é repassadomkdir
.No que diz
mkdir
respeito, 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.fonte
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.
fonte
--
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