Olen melko uusi bash-komentosarjojen käsittely ja on mennyt melko hyvin, mutta on törmännyt ongelmaan.
Yritän luoda komentosarjan, joka käyttää eteenpäin kauttaviivaa (/), mutta saan jatkuvasti virheilmoituksen /: is a directory.
Joten mitä Minun on välitettävä komento test/(hello)
päätelaitteen ohjelmalle. Joten olen lisännyt taaksepäin viivoja, jotta se toimisi: test\/\(hello\)
, Saan tämän virheen. Mikä tässä on vikaa?
Kommentit
- missä komentosarja käyttää eteenpäin kauttaviivaa? Vaikuttaa siltä, että välität onnistuneesti argumentin komennolle / komentosarjalle, mutta että komentosarjassa on virhe. Voitteko antaa meille tarkemman esimerkin? eikö ' mainitse rivinumero tai jotain?
Vastaa
Tämän pitäisi tapahtua vain, jos et läpäise a komento ennen argumenttia. Sinun on kutsuttava komentoja tällä tavoin:
command [args ...]
Jos kutsut sen näin, se toimii.
$ echo test/\(hello\) test/(hello)
Tietueen kannalta on yleensä paljon helpompaa (ja paljon luettavampaa) lainata argumentteja sen sijaan, että pakenisi kaikki metamerkit. Voit tehdä tämän käyttämällä "
ja "
(tästä on hyviä tietoja täällä ).
Kommentit
- Äänestetty. Kuori tulkitsee vain kauttaviivalla erotetun tekstin hakemistoina, ei komentoina / argumentteina. Eteenpäin viivaa voidaan käyttää esimerkiksi Perl-komentosarjojen argumenteissa (edellyttää
Getopt::Long
-määrityksiä tai omien rullaamista), mutta vaatii kuitenkin välilyönnin komennon ja argumenttien välillä – jälleen kerran, tämä on kuorivaatimus.
Vastaa
Jos sinun on välitettävä tarkka merkkijono test/(hello)
ohjelmalle, laita se yksittäisten lainausmerkkien väliin:
someprogram "test/(hello)"
Jokainen merkki tulkitaan kirjaimellisesti yksittäisten lainausten välillä, paitsi yksi lainausmerkki itse. Jos tarvitset yksittäisen lainausmerkin merkkijonoon, välitä se nimellä "\""
(lopeta kirjaimellinen merkkijono, laita seuraava merkki, yksi lainaus tulkitaan kirjaimellisesti, aloita kirjaimellinen merkkijono).
echo "Lasciate ogne speranza, voi ch"\""entrate"
Tämä ei liity tässä näytettävään virheilmoitukseen. /: is a directory
tarkoittaa, että yritit suorittaa /
-ohjelmana. Oletettavasti on paikka, johon yritit kirjoittaa koko polun ohjelmaan, mutta jätit ylimääräisen tilan, kuten kohdassa
/ path/to/program
Voi olla muita välimerkkejä, jotka tekevät tämä vähemmän ilmeinen, tai ohjausmerkit siinä viestissä. Virheenkorjauksen helpottamiseksi laita set -x
komentosarjan toiselle riville heti alkuperäisen #!
-rivin jälkeen, jotta kuori tulostaa jäljitys jokaisesta suoritettavasta rivistä.