Sou muito novo no script bash e estou indo razoavelmente bem, mas encontrei um problema.
Estou tentando criar um script que usa uma barra (/), no entanto, continuo recebendo a mensagem de erro /: is a directory.
Então, basicamente, o que Preciso passar o comando test/(hello)
para um programa no terminal. Portanto, adicionei barras invertidas para fazê-lo funcionar: test\/\(hello\)
, no entanto , Recebo este erro. O que há de errado aqui?
Comentários
- onde o script usa a barra? Parece que você está passando com sucesso o argumento para o comando / script, mas que há um erro no script. Você pode nos dar um exemplo mais detalhado? Além disso, não ' não menciona um número de linha ou algo assim?
Resposta
Isso só deve acontecer se você não estiver passando por um comando antes do argumento. Você precisa invocar comandos como:
command [args ...]
Se você invocá-lo assim, ele funcionará.
$ echo test/\(hello\) test/(hello)
Para registro, geralmente é muito mais fácil (e muito mais legível) citar argumentos em vez de escapar de todos os metacaracteres. Você pode fazer isso usando "
e "
(há boas informações sobre isso aqui ).
Comentários
- Votos positivos. O shell interpretará o texto separado apenas por barras como diretórios, não comandos / argumentos. A barra pode ser usada em argumentos de, por exemplo, scripts Perl (requer a configuração
Getopt::Long
ou rolar o seu próprio), mas ainda requer o espaço entre o comando e os argumentos – novamente, este é um requisito do shell.
Resposta
Se você precisar passar a string exata test/(hello)
para um programa, coloque-o entre aspas simples:
someprogram "test/(hello)"
Cada caractere é interpretado literalmente entre aspas simples, exceto o caractere de aspas simples em si. Se você precisar de um caractere de aspas simples na string, passe-o como "\""
(string literal final, caractere seguinte aspas, apóstrofo interpretado literalmente, string literal inicial).
echo "Lasciate ogne speranza, voi ch"\""entrate"
Isso não está relacionado à mensagem de erro que você mostra aqui. /: is a directory
significa que você tentou executar /
como um programa. Presumivelmente, existe um lugar onde você tentou escrever o caminho completo para um programa, mas deixou um espaço extra, como em
/ path/to/program
Pode haver outros caracteres de pontuação criando isso é menos óbvio ou caracteres de controle nessa mensagem. Para facilitar a depuração, coloque set -x
na segunda linha do script, logo após a linha #!
inicial, para que o shell imprima um rastreamento de cada linha que executa.