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.