Jeg er ret ny i bash-scripting og har gået rimeligt godt, men er kommet ind i et problem.
Jeg prøver at oprette et script, der bruger en skråstreg fremad (/), men jeg får vedvarende fejlmeddelelsen /: is a directory.
Så dybest set hvad Jeg har brug for er at sende kommandoen test/(hello)
til et program i terminalen. Så jeg har tilføjet tilbageslag for at få det til at fungere: test\/\(hello\)
, Jeg får denne fejl. Hvad er der galt her?
Kommentarer
- hvor bruger scriptet skråstreg? Det lyder som om, at du med succes sender argumentet til kommandoen / scriptet, men at der er en fejl i scriptet. Kan du give os et mere detaljeret eksempel? ' nævner det ikke et linjenummer eller noget?
Svar
Dette skal kun ske, hvis du ikke passerer en kommando før argumentet. Du er nødt til at påkalde kommandoer som sådan:
command [args ...]
Hvis du påberåber det sådan, fungerer det.
$ echo test/\(hello\) test/(hello)
For ordens skyld er det generelt meget lettere (og meget mere læsbart) at citere argumenter i stedet for at undslippe alle metategn. Du kan gøre dette ved hjælp af "
og "
(der er gode oplysninger om denne her ).
Kommentarer
- Opstemt. Skallen fortolker kun tekst adskilt af skråstreger som mapper, ikke kommandoer / argumenter. Fremad skråstreg kan bruges i argumenter for for eksempel Perl-scripts (kræver konfiguration af
Getopt::Long
eller rullende dine egne), men kræver stadig mellemrummet mellem kommandoen og argumenterne – igen, dette er et skalkrav.
Svar
Hvis du har brug for at videregive den nøjagtige streng test/(hello)
til et program, sæt det mellem enkelte anførselstegn:
someprogram "test/(hello)"
Hvert tegn fortolkes bogstaveligt mellem enkelt anførselstegn, undtagen det enkelte anførselstegn sig selv. Hvis du har brug for et enkelt citattegn i strengen, skal du give det som "\""
(slut bogstavelig streng, citat næste tegn, enkelt citat fortolkes bogstaveligt, start bogstavelig streng).
echo "Lasciate ogne speranza, voi ch"\""entrate"
Dette er ikke relateret til den fejlmeddelelse, du viser her. /: is a directory
betyder, at du forsøgte at udføre /
som et program. Der er formodentlig et sted, hvor du forsøgte at skrive den fulde sti til et program, men efterlod et ekstra mellemrum, som i
/ path/to/program
Der kan være andre tegnsætningstegn, der laver dette mindre indlysende eller kontrolkarakterer i den besked. For at lette debugging skal du sætte set -x
på anden linje i scriptet lige efter den indledende #!
linje, så skallen udskriver en spor af hver linje, den udfører.