come fare a getopts basta leggere il primo post dei personaggi `-` [chiuso]


3

Ho uno script di shell testShell.sh che usa getopts come sotto:

#!/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=$@"

Quando provo eseguirlo come segue:

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

L'output che ottengo sta seguendo:

j=value3
e=2
remaining=

Ma mi piacerebbe l'output come:

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

È possibile fare in modo che getopts guarda solo al primo post dei personaggi - simbolo? in modo che non interpreti -Djvalue3 come -jvalue3 e -pvalue2 come -e2.


1
Per favore non moltiplicare, anche chiesto su unix & amp; linux e StackOverflow
glenn jackman

Chiusura qui in modo appropriato - in futuro si prega di postare solo su un sito di stack, grazie!
slhck

Risposte:


1

Dopo averlo postato su 3 forum e cercato ovunque ... alla fine ho provato quanto segue e ha funzionato ...

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

Avviso

--  

dopo -evalue4

E l'output era

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

Credo -- chiede getopts a interrompere le opzioni di elaborazione.


2
Manpage di getopt(3): & Gt; L'argomento speciale "-" impone la fine della scansione delle opzioni indipendentemente dalla modalità di scansione. Quindi sì. Questo è comunemente usato come misura di sicurezza nell'assegnazione di massa quando i nomi dei file possono essere interpretati come argomento.
slhck

Sì. L'ho letto da qualche parte e poi ho dimenticato. All'improvviso ha cliccato e risolto per me. grazie comunque.
SiB
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.