/: è un problema di directory in bash

Sono abbastanza nuovo nello scripting bash e sto andando abbastanza bene ma ho riscontrato un problema.

Sto cercando di creare uno script che utilizzi una barra (/), tuttavia continuo a ricevere il messaggio di errore /: is a directory.

Quindi, in pratica, cosa Ho bisogno di passare il comando test/(hello) a un programma nel terminale. Pertanto, ho aggiunto barre rovesciate per farlo funzionare: test\/\(hello\), tuttavia , Ottengo questo errore. Che cosa cè che non va qui?

Commenti

  • dove lo script usa la barra? Sembra che tu stia trasmettendo con successo l argomento al comando / script, ma che ci sia un errore nello script. Puoi fornirci un esempio più dettagliato? ' non menziona un numero di riga o qualcosa del genere?

Risposta

Questo dovrebbe accadere solo se non stai superando un comando prima dellargomento. Devi richiamare comandi in questo modo:

command [args ...] 

Se lo invochi in questo modo, funzionerà.

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

Per la cronaca, è generalmente molto più facile (e molto più leggibile) citare gli argomenti invece di fare lescape di tutti i metacaratteri. Puoi farlo usando " e " (ci sono buone informazioni su questo qui ).

Commenti

  • Voto positivo. La shell interpreterà il testo separato solo da barre come directory, non comandi / argomenti. La barra può essere utilizzata negli argomenti, ad esempio, degli script Perl (richiede la configurazione di Getopt::Long o il rollio personale), ma richiede comunque lo spazio tra il comando e gli argomenti – di nuovo, questo è un requisito della shell.

Rispondi

Se devi passare la stringa esatta test/(hello) a un programma, inseriscilo tra virgolette singole:

someprogram "test/(hello)" 

Ogni carattere viene interpretato letteralmente tra virgolette singole, tranne il carattere apice singolo si. Se hai bisogno di una singola virgoletta nella stringa, passala come "\"" (fine stringa letterale, citazione carattere successivo, virgoletta singola interpretata letteralmente, inizio stringa letterale).

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

Questo non è correlato al messaggio di errore mostrato qui. /: is a directory significa che hai tentato di eseguire / come programma. Presumibilmente cè un punto in cui hai provato a scrivere il percorso completo di un programma ma hai lasciato uno spazio extra, come in

/ path/to/program 

Potrebbero esserci altri caratteri di punteggiatura che compongono questo meno ovvio, o caratteri di controllo in quel messaggio. Per facilitare il debug, metti set -x sulla seconda riga dello script, subito dopo la riga iniziale #!, in modo che la shell stampi un traccia di ogni riga che esegue.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *