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::Longou 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.