bash: Aufruf eines Skripts mit double-quote-argument
Habe ich ein bash-Skripte, die ein argument, die in doppelten Anführungszeichen, die erstellt ein shape-file der Karte innerhalb der vorgegebenen Grenze zwischen, z.B.
$ export_map "0 0 100 100"
Im Skript gibt es zwei select
Aussagen:
select ENCODING in UTF8 WIN1252 WIN1255 ISO-8859-8;
...
select NAV_SELECT in Included Excluded;
Natürlich, diese beiden Aussagen erfordern die Eingabe geben Sie eine Zahl als Eingabe. Dies kann umgangen werden, indem Rohrleitungen, die zahlen, gefolgt von einem Zeilenumbruch, an das Skript.
Um Zeit zu sparen, würde ich gerne ein Skript erstellen würden 8 Karten - für jede Kombination von ENCODING
(4 Optionen) und NAV_SELECT
(2 Optionen).
Ich geschrieben habe, ein weiteres bash-Skript, create_map
auf server als wrapper:
#!/bin/bash
for nav in 1 2 3 4;
do
for enc in 1 2;
do
printf "$nav\n$enc\n" | /bin/bash -c "./export_map.sh \"0 0 100 100\""
done
done
**Das funktioniert (danke, Brian!), aber ich kann nicht einen Weg finden, um das numerische argument "0 0 100 100"
weitergegeben werden, die von außerhalb der äußeren Schrift. **
Im Grunde bin ich auf der Suche nach Weg, um zu akzeptieren ein argument in Anführungszeichen zu ein wrapper bash-script und pass es mit der Anführungszeichen - zu einem inneren Drehbuch.
KLARSTELLUNGEN:
export_map
ist das main-Skript aufgerufen wird, von create_map
8 mal.
Irgendwelche Ideen?
Dank,
Adam
- Ich bin ein wenig unklar, was Sie hier zu tun versuchen. Sie sagen, Sie versuchen, etwas zu tun mit
select
Aussagen, aber es gibt keine select-Anweisungen in der bash-Skript. Sie drucken aus zwei zahlen, die auf verschiedenen Linien, und Rohrleitungen, die in einem Aufruf desexport_map.sh
Skript, die Sie nicht geben Sie den code für den (ist es der gleiche wie dercreate_map
Sie erwähnen früher?). Ich bin ein bisschen unklar, wo Ihre Angabe der Probleme kommen auch. Können Sie versuchen, auszuführen, was genau Sie zu tun versuchen, und das genaue problem, das Sie haben? - Ich habe geklärt, meine Antwort - thanks a bunch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich verstehe dein problem richtig (wobei ich nicht sicher bin; siehe mein Kommentar), Sie sollten wahrscheinlich hinzufügen eine andere
\n
zu Ihremprintf
;printf
nicht fügen Sie einen trailing newline standardmäßig die Möglichkeit, dassecho
tut. Dadurch wird sichergestellt, dass der zweite Wert wird ordnungsgemäß gelesen werden können, indem dieselect
Befehl, gehe ich davon erscheint inexport_map.sh
.Auch, ich glaube nicht, dass Sie brauchen, um hinzuzufügen, die
/bin/bash -c
- und Anführungszeichen. Das folgende sollte ausreichen, es sei denn, ich bin fehlt etwas:Bearbeiten vielen Dank für die Klarstellung. Um ein argument von Ihr wrapper-Skript, in das innere Skript, indem Sie es als ein einzelnes argument an, die Sie übergeben können
"$1"
, wobei die Anführungszeichen darauf hindeuten, dass Sie wollen, zu halten, gruppiert als ein argument, und$1
ist der erste parameter, um Ihre wrapper-Skript. Wenn Sie möchten, übergeben alle Parameter, die von Ihrem äußeren script in Ihrem inneren Skript, die jeweils gehalten als einzigen parameter, die Sie verwenden können"$@"
statt.Hier ein kurzes Beispiel, wie
"$@"
funktioniert. Zuerstinner.bash
:outer.bash
:Und die Berufung auf Sie: