/: é um problema de diretório no bash

0

Sou muito novo no bash scripting e estou indo razoavelmente bem, mas me deparei com um problema.

Estou tentando criar um script que use uma barra (/), mas recebo a mensagem de erro /: is a directory.

Então basicamente o que eu preciso é passar o comando test/(hello) para um programa no terminal. Então, adicionei barras invertidas para que funcione: test\/\(hello\) , no entanto, recebo esse erro. O que está errado aqui?

    
por Luke 12.12.2012 / 07:07

2 respostas

5

Isso só deve acontecer se você não estiver passando um comando antes do argumento. Você precisa invocar comandos assim:

command [args ...]

Se você invocar assim, funcionará.

$ echo test/\(hello\)
test/(hello)

Para o 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 este aqui ).

    
por 12.12.2012 / 07:13
0

Se você precisar passar a string exata test/(hello) para um programa, coloque-a entre aspas simples:

someprogram 'test/(hello)'

Cada caractere é interpretado literalmente entre aspas simples, exceto o próprio caractere de aspas simples. Se você precisar de um caractere de aspas simples na string, passe-o como '\'' (string literal final, citação do próximo caractere, aspas simples interpretadas literalmente, inicie a string literal).

echo 'Lasciate ogne speranza, voi ch'\''entrate'

Isso não está relacionado à mensagem de erro mostrada aqui. /: is a directory significa que você tentou executar / como um programa. Há presumivelmente 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 que tornem 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 traço de cada linha executada.

    
por 13.12.2012 / 02:14