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.


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.