/: er et katalogproblem i bash

Jeg er ganske fersk med bash scripting og har gått rimelig bra, men har fått et problem.

Jeg prøver å lage et skript som bruker en skråstrek fremover (/), men jeg får feilmeldingen /: is a directory.

Så egentlig hva Jeg trenger er å sende kommandoen test/(hello) til et program i terminalen. Så jeg har lagt til tilbakeslag for å få det til å fungere: test\/\(hello\) , Jeg får denne feilen. Hva er galt her?

Kommentarer

  • hvor bruker skriptet skråstrek? Det høres ut som om du har sendt argumentet til kommandoen / skriptet, men at det er en feil i skriptet. Kan du gi oss et mer detaljert eksempel? nevner ikke ' et linjenummer eller noe?

Svar

Dette skal bare skje hvis du ikke passerer en kommandoen før argumentet. Du må påkalle kommandoer slik:

command [args ...] 

Hvis du påkaller det slik, vil det fungere.

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

For ordens skyld er det generelt mye lettere (og mye mer lesbart) å sitere argumenter i stedet for å unnslippe alle metategn. Du kan gjøre dette ved å bruke " og " (det er god informasjon om dette her ).

Kommentarer

  • Stemte. Skallet vil tolke tekst kun adskilt av skråstrek som kataloger, ikke kommandoer / argumenter. Forover skråstrek kan brukes i argumenter for for eksempel Perl-skript (krever konfigurering av Getopt::Long eller rulling av dine egne), men krever fortsatt mellomrom mellom kommandoen og argumentene – igjen, dette er et skallkrav.

Svar

Hvis du trenger å sende den nøyaktige strengen test/(hello) til et program, sett det mellom enkle anførselstegn:

someprogram "test/(hello)" 

Hvert tegn tolkes bokstavelig mellom enkelt anførselstegn, bortsett fra tegnet med enkelt anførselstegn seg selv. Hvis du trenger et enkelt sitattegn i strengen, kan du sende det som "\"" (slutt bokstavelig streng, sitat neste tegn, enkelt sitat tolket bokstavelig, start bokstavelig streng).

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

Dette er ikke relatert til feilmeldingen du viser her. /: is a directory betyr at du prøvde å utføre / som et program. Det er antagelig et sted der du prøvde å skrive hele banen til et program, men la igjen et ekstra mellomrom, som i

/ path/to/program 

Det kan være andre tegnsettingstegn som lager dette mindre åpenbare, eller kontrollkarakterene i den meldingen. For å lette feilsøking, sett set -x på andre linje i skriptet, like etter den første #! -linjen, slik at skallet vil skrive ut en spor av hver linje den utfører.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *