/: je problém s adresářem v bash

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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *