Portál AbcLinuxu, 10. května 2025 05:28
-l soubor -v -q -P souborProblém je v tom, že bych potřeboval, aby tam šel dát i prarametr javovské system properties, tedy něco jako
-Dparam=value -Dfoo=barGetopts očekávají jediné písmenko, tak je to zmate. Situaci ještě komplikuje skutečnost, že ty -D parametry by tam měly být víckrát než jednou. Zkoušel jsem -D parametry odchytit na začátku pomocí regulárních výrazů, ale nějak je nedokážu pomocí bashe odstranit (ani tento návod nepomohl). Řešení by totiž bylo uložit tyto volby do samostatné proměné, a hlavně je odfiltrovat z parametrů getopts. Mám na to použít externí nástroj (sed, awk, expr, ...)? Ideální by bylo, kdyby ten způsob nebyl bash only, ale fungoval třeba i v dash a ksh, ... Jo, určitě by šlo udělat mapování voleb na jednotlivé system properties (tj. -f ve výsledku předá jave -Dfoo=bar), ale to není to co hledám. Ještě, jde v bash implementaci getopts použít long options, jako jdou třeba v pythonu? Díky za tipy.
getopts
je možné použít getopt
, který podporuje dlouhé volby:
#!/usr/bin/env bash #set -x scriptname=`basename $0` args=`getopt -n "$scriptname" -o v: --long arg1:,arg2:,arg3 -- "$@"` eval set -- "$args" while true; do case "$1" in --arg1) echo "arg1: $2"; shift 2 ;; --arg2) echo "arg2: $2"; shift 2 ;; --arg3) echo "arg3: $2"; shift 2 ;; -v) echo "volba v: $2"; shift 2 ;; --) break ;; esac doneVolání scriptu:
./run.sh --arg1 123 --arg1 456 --arg1=789 -v konec arg1: 123 arg1: 456 arg1: 789 volba v: konecV man je uvedeno, že getopt je podporován v těchto shellech: sh, bash, csh, tcsh.
-D[^=]\+=[^ ]\+
, ale to bych asi chtěl moc $ cat xx.sh #!/bin/bash while getopts "D:" OPT; do echo "$OPT $OPTARG" done $ ./xx.sh -D x -Dy -D foo=bar -Djoe=doe D x D y D foo=bar D joe=doe
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.