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::Long
nebo 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.