wie man getopts macht lies einfach den ersten zeichen post `-` [closed]

3

Ich habe ein Shell-Skript testShell.sh, das getoptswie folgt verwendet:

#!/bin/bash
while getopts ":j:e:" option; do
    case "$option" in
        j) MYHOSTNAME=$OPTARG ;;
        e) SCRIPT_PATH=$OPTARG ;;
        *) ;;
    esac
done

echo "j=$MYHOSTNAME"
echo "e=$SCRIPT_PATH"
shift $((OPTIND - 1))
echo "remaining=$@"

Wenn ich es teste, führe ich es folgendermaßen aus:

$ testShell.sh  -jvalue1 -evalue4 -Djvalue3  -pvalue2

Die Ausgabe, die ich erhalte, ist folgende:

j=value3
e=2
remaining=

Aber ich möchte die Ausgabe als:

j=value1
e=value4
remaining=-Djvalue3 -pvalue2

Kann man sicherstellen, dass getopts nur das erste Zeichen nach dem - Symbol aussieht ? damit es nicht -Djvalue3als -jvalue3und -pvalue2als interpretiert -e2.

SiB
quelle
1
Bitte nicht multiposten, auch auf Unix & Linux und Stackoverflow gefragt
Glenn Jackman
Hier entsprechend schließen - in Zukunft bitte nur noch auf einer Stapelseite posten, danke!
Slhck

Antworten:

1

Nachdem ich es in 3 Foren gepostet und überall gesucht habe ... habe ich irgendwann folgendes ausprobiert und es hat funktioniert ...

testShell.sh  -jvalue1 -evalue4 -- -Djvalue3  -pvalue2

Beachten

--  

nach dem -evalue4

Und die Ausgabe war

j=value1
e=value4
remaining=-Djvalue3 -pvalue2

Ich glaube, --bittet getopts, Verarbeitungsoptionen zu stoppen.

SiB
quelle
2
Manpage von getopt(3): > Das Sonderargument "-" erzwingt ein Ende des Options-Scans unabhängig vom Scan-Modus. Also ja. Dies wird üblicherweise als Sicherheitsmaßnahme bei der Massenzuweisung verwendet, wenn Dateinamen als Argument interpretiert werden könnten.
Slhck
Ja. Ich habe es irgendwo gelesen und dann vergessen. Plötzlich hat es geklickt und es für mich gelöst. trotzdem danke.
SiB