/: é um problema de diretório no bash

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.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *