shell: use getopt

This commit is contained in:
tv 2017-06-30 11:04:17 +02:00
parent aa8fb19044
commit babbed38df

View File

@ -3,7 +3,7 @@
inherit (nixpkgs) lib pkgs; inherit (nixpkgs) lib pkgs;
slib = import ./lib; slib = import ./lib;
# usage: deploy system=SYSTEM [target=TARGET] # usage: deploy --system=SYSTEM [--target=TARGET]
cmds.deploy = pkgs.writeDash "cmds.deploy" '' cmds.deploy = pkgs.writeDash "cmds.deploy" ''
set -efu set -efu
@ -15,7 +15,7 @@
exec ${utils.deploy} exec ${utils.deploy}
''; '';
# usage: test system=SYSTEM target=TARGET # usage: test --system=SYSTEM --target=TARGET
cmds.test = pkgs.writeDash "cmds.test" /* sh */ '' cmds.test = pkgs.writeDash "cmds.test" /* sh */ ''
set -efu set -efu
@ -28,18 +28,19 @@
''; '';
init.args = pkgs.writeText "init.args" /* sh */ '' init.args = pkgs.writeText "init.args" /* sh */ ''
fail= args=$(${pkgs.utillinux}/bin/getopt -n "$command" -s sh \
for arg; do -o s:t: \
case $arg in -l system:,target: \
system=*) system=''${arg#*=};; -- "$@")
target=*) target=''${arg#*=};; if \test $? != 0; then exit 1; fi
*) echo "$command: bad argument: $arg" >&2; fail=1 eval set -- "$args"
esac while :; do case $1 in
done -s|--system) system=$2; shift 2;;
if \test -n "$fail"; then -t|--target) target=$2; shift 2;;
exit 1 --) shift; break;;
fi esac; done
unset fail for arg; do echo "$command: bad argument: $arg" >&2; done
if \test $# != 0; then exit 2; fi
''; '';
init.env = pkgs.writeText "init.env" /* sh */ '' init.env = pkgs.writeText "init.env" /* sh */ ''