A /: egy könyvtárprobléma a bash

A bash szkriptekben még nagyon új vagyok, és meglehetősen jól sikerült, de problémába ütköztem. >

Olyan szkriptet próbálok létrehozni, amely egy perjelet (/) használ, azonban folyamatosan kapom a /: is a directory.

hibaüzenetet Szükségem van arra, hogy a test/(hello) parancsot átadjam a terminál egyik programjának. Tehát visszavonásokat írtam hozzá, hogy működjenek: test\/\(hello\) , Ezt a hibát kapom. Mi a baj itt?

Megjegyzések

  • hol használja a szkript az elővágott perjelet? Úgy hangzik, hogy sikeresen átadja az argumentumot a parancsnak / szkriptnek, de hiba van a szkriptben. Tudna adni egy részletesebb példát? nem ' nem említ sorszámot vagy ilyesmit?

Válasz

Ez csak akkor történhet meg, ha nem halad el a parancsot az argumentum előtt. Ilyen parancsokat kell meghívnia:

command [args ...] 

Ha így hívja meg, akkor működni fog.

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

A nyilvántartás szempontjából általában sokkal könnyebb (és sokkal olvashatóbb) argumentumokat idézni ahelyett, hogy elmenekülnék az összes metakarakterből. Ezt megteheti a " és " (erről itt vannak jó információk).

Megjegyzések

  • Szavazat. A shell csak a perjelekkel elválasztott szöveget fog könyvtárként értelmezni, nem pedig parancsokat / argumentumokat. Az elővágó perjel használható például Perl-szkriptek argumentumaiban (meg kell adnia a Getopt::Long konfigurálását vagy a saját gördülését), de a parancs és az argumentumok közötti szóközre van szükség – ismét, ez egy shell követelmény.

Válasz

Ha át kell adnia a pontos karakterláncot test/(hello) programhoz, tegye azt idézőjelek közé:

someprogram "test/(hello)" 

Minden karakter szó szerint értelmezhető egyetlen idézet között, kivéve az egyetlen idéző karaktert maga. Ha egyetlen idézőjelre van szüksége a karakterláncban, adja át "\"" néven (szó szerinti karakterlánc befejezése, következő karakter idézése, egyetlen idézet szó szerinti értelmezése, szó szerinti kezdő karakterlánc).

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

Ez nem kapcsolódik az itt megjelenített hibaüzenethez. A /: is a directory azt jelenti, hogy a / programot próbálta végrehajtani. Vélhetően van olyan hely, ahol megpróbálta megírni a program teljes elérési útját, de további helyet hagyott, mint például a

/ path/to/program 

Lehetséges, hogy más írásjelek is készülnek ez kevésbé nyilvánvaló, vagy vezérlő karakter az üzenetben. A hibakeresés megkönnyítése érdekében tegye a set -x parancsfájlt a szkript második sorába, közvetlenül a kezdeti #! sor után, hogy a shell kinyomtassa a minden végrehajtott sor nyoma.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük