/: är ett katalogproblem i bash

Jag är ganska ny i bash-skript och har gått ganska bra men har stött på ett problem.

Jag försöker skapa ett skript som använder en snedstreck (/), men jag får fortfarande felmeddelandet /: is a directory.

Så i princip vad Jag behöver är att skicka kommandot test/(hello) till ett program i terminalen. Så jag har lagt till snedstreck för att få det att fungera: test\/\(hello\) , Jag får det här felet. Vad är fel här?

Kommentarer

  • var använder manuset snedstrecket? Det låter som om du lyckats skicka argumentet till kommandot / skriptet, men att det finns ett fel i skriptet. Kan du ge oss ett mer detaljerat exempel? ' tänker det på ett radnummer eller något?

Svar

Detta ska bara hända om du inte passerar a kommandot före argumentet. Du måste anropa sådana kommandon:

command [args ...] 

Om du åberopar det så här fungerar det.

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

För ordens skull är det i allmänhet mycket lättare (och mycket mer läsbart) att citera argument istället för att undkomma alla metatecken. Du kan göra detta med " och " (det finns bra information om denna här ).

Kommentarer

  • Röstade. Skalet tolkar text som endast separeras av snedstreck som kataloger, inte kommandon / argument. Snedstrecket framåt kan användas i argument för till exempel Perl-skript (kräver konfigurering av Getopt::Long eller rullning av dina egna), men kräver fortfarande mellanslag mellan kommandot och argumenten – igen, detta är ett skalkrav.

Svar

Om du behöver skicka exakt sträng test/(hello) till ett program, sätt det mellan enstaka citat:

someprogram "test/(hello)" 

Varje tecken tolkas bokstavligen mellan enstaka citat, förutom det enda citattecknet sig. Om du behöver ett enda citattecken i strängen, skicka det som "\"" (avsluta bokstavlig sträng, citera nästa tecken, enstaka citat tolkas bokstavligen, starta bokstavlig sträng).

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

Detta är inte relaterat till felmeddelandet du visar här. /: is a directory betyder att du försökte köra / som ett program. Det finns förmodligen en plats där du försökte skriva hela sökvägen till ett program men lämnade ett extra utrymme, som i

/ path/to/program 

Det kan finnas andra skiljetecken som gör detta mindre uppenbara, eller kontrolltecken i det meddelandet. För att underlätta felsökning, placera set -x på den andra raden i skriptet, strax efter den första #! -raden, så att skalet skriver ut en spår av varje rad som den kör.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *