/: este o problemă de director în bash

Sunt destul de nou în scripturile bash și merg destul de bine, dar am întâmpinat o problemă.

Încerc să creez un script care folosește o linie directă (/), totuși primesc în continuare mesajul de eroare /: is a directory.

Deci, practic, ce Am nevoie să trec comanda test/(hello) la un program din terminal. Așa că am adăugat backslash-uri pentru a-l face să funcționeze: test\/\(hello\), totuși , Primesc această eroare. Ce este în neregulă aici?

Comentarii

  • unde folosește scriptul slashul direct? Se pare că transmiteți cu succes argumentul la comandă / script, dar că există o eroare în script. Ne puteți da un exemplu mai detaliat? De asemenea, ' nu menționează un număr de linie sau ceva?

Răspunde

Acest lucru ar trebui să se întâmple numai dacă nu treceți un comanda înainte de argument. Trebuie să invocați astfel de comenzi:

command [args ...] 

Dacă o invocați astfel, va funcționa.

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

Pentru înregistrare, este „în general mult mai ușor (și mult mai ușor de citit) să citiți argumente în loc să scăpați de toate metacaractere. Puteți face acest lucru folosind " și " (există informații bune despre acest aici ).

Comentarii

  • Votat în sus. Shell-ul va interpreta textul separat numai prin bare ca directoare, nu comenzi / argumente. Slash-ul înainte poate fi utilizat în argumentele, de exemplu, scripturilor Perl (necesită configurarea Getopt::Long sau rularea propriului), dar necesită totuși spațiul dintre comandă și argumente – din nou, aceasta este o cerință de shell.

Răspunde

Dacă trebuie să treci șirul exact test/(hello) la un program, puneți-l între ghilimele simple:

someprogram "test/(hello)" 

Fiecare caracter este interpretat literal între ghilimele simple, cu excepția caracterului ghilimelelor unice în sine. Dacă aveți nevoie de un singur caracter de ghilimel în șir, treceți-l ca "\"" (sfârșit șir literal, citat caracterul următor, ghilimel singur interpretat literal, începe șir literal).

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

Acest lucru nu are legătură cu mesajul de eroare afișat aici. /: is a directory înseamnă că ați încercat să executați / ca program. Probabil că există un loc în care ați încercat să scrieți calea completă către un program, dar ați lăsat un spațiu suplimentar, ca în

/ path/to/program 

Pot exista alte caractere de punctuație acest lucru mai puțin evident sau caracterele de control din acel mesaj. Pentru a facilita depanarea, puneți set -x pe a doua linie a scriptului, imediat după linia inițială #!, astfel încât shell-ul să imprime un urmă a fiecărei linii pe care o execută.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *