1230 Stimmen

Alle Argumente in einem Bash-Shell-Skript übergeben.

Ich schreibe ein sehr einfaches Skript, das ein anderes Skript aufruft, und ich muss die Parameter von meinem aktuellen Skript zum auszuführenden Skript übertragen.

Zum Beispiel heißt mein Skript foo.sh und ruft bar.sh auf.

foo.sh:

bar $1 $2 $3 $4

Wie kann ich das machen, ohne jeden Parameter explizit anzugeben?

0 Stimmen

0 Stimmen

Ich musste diese Lösung für meinen Anwendungsfall verwenden.

2voto

user6650302 Punkte 39

Funktioniert gut, außer wenn Leerzeichen oder maskierte Zeichen vorhanden sind. Ich finde nicht den Weg, Argumente in diesem Fall zu erfassen und an ein SSH innerhalb des Skripts zu senden.

Dies könnte nützlich sein, ist aber so hässlich

_command_opts=$( echo "$@" | awk -F\- 'BEGIN { OFS=" -" } { for (i=2;i<=NF;i++) { gsub(/^[a-z] /,"&@",$i) ; gsub(/ $/,"",$i );gsub (/$/,"@",$i) }; print $0 }' | tr '@' \' )

2voto

puchu Punkte 2963

"${array[@]}" ist der richtige Weg, um ein Array in bash zu übergeben. Ich möchte eine komplette Spickzettel geben: wie man Argumente vorbereitet, umgeht und verarbeitet.

pre.sh -> foo.sh -> bar.sh.

#!/bin/bash

args=("--a=b c" "--e=f g")
args+=("--q=w e" "--a=s \"'d'\"")

./foo.sh "${args[@]}"

#!/bin/bash

./bar.sh "$@"

#!/bin/bash

echo $1
echo $2
echo $3
echo $4

Ergebnis:

--a=b c
--e=f g
--q=w e
--a=s "'d'"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X