Jsem v bash skriptování celkem nový a šlo mi to celkem dobře, ale narazili na problém.
Snažím se vytvořit skript, který používá lomítko (/), nicméně se mi stále zobrazuje chybová zpráva /: is a directory.
Takže v podstatě co Potřebuji předat příkaz test/(hello) programu v terminálu. Proto jsem přidal zpětná lomítka, aby to fungovalo: test\/\(hello\), nicméně , Zobrazuje se mi tato chyba. Co se tady děje?
Komentáře
- kde používá skript lomítko? Vypadá to, že úspěšně předáváte argument do příkazu / skriptu, ale ve skriptu je chyba. Můžete nám poskytnout podrobnější příklad? Také, nezmiňuje ' číslo řádku nebo tak něco?
Odpovědět
To by se mělo stát, pouze pokud neprocházíte a příkaz před argumentem. Musíte vyvolat příkazy takto:
command [args ...]
Pokud je vyvoláte takto, bude to fungovat.
$ echo test/\(hello\) test/(hello)
Pro záznam je obecně mnohem snazší (a mnohem čitelnější) citovat argumenty, místo aby unikly všem metaznakům. Můžete to udělat pomocí " a " (o tomto zde jsou dobré informace).
Komentáře
- Hlasováno. Shell bude interpretovat text oddělený pouze lomítky jako adresáře, nikoli příkazy / argumenty. Přední lomítko lze použít například v argumentech skriptů Perl (vyžaduje konfiguraci
Getopt::Longnebo vlastní), ale stále vyžaduje mezeru mezi příkazem a argumenty – opět, toto je požadavek prostředí.
Odpověď
Pokud potřebujete předat přesný řetězec test/(hello) do programu, vložte jej mezi jednoduché uvozovky:
someprogram "test/(hello)"
Každý znak je interpretován doslovně mezi jednoduchými uvozovkami, kromě znaku uvozovek sám. Pokud v řetězci potřebujete znak s jednoduchou uvozovkou, předejte jej jako "\"" (konec doslovného řetězce, uvození dalšího znaku, uvození jedné uvozovky doslovně, zahájení doslovného řetězce).
echo "Lasciate ogne speranza, voi ch"\""entrate"
Toto nesouvisí s chybovou zprávou, kterou zde zobrazujete. /: is a directory znamená, že jste se pokusili spustit program /. Pravděpodobně existuje místo, kde jste se pokusili napsat úplnou cestu k programu, ale ponechali jste místo navíc, jako v
/ path/to/program
Mohou existovat i jiné interpunkční znaky toto méně zjevné nebo kontrolní znaky v této zprávě. Chcete-li usnadnit ladění, vložte set -x na druhý řádek skriptu, hned za počáteční #! řádek, aby shell vytiskl stopa každého řádku, který provede.