Beispiel:
check_prog hostname.com /bin/check_awesome -c 10 -w 13
check_remote -H $HOSTNAME -C "$ARGS"
#To be expanded as
check_remote -H hostname.com -C "/bin/check_awesome -c 10 -w 13"
Ich hoffe, dass das oben Gesagte Sinn macht. Die Argumente werden sich ändern, da ich dies für mehr als 20 Befehle verwenden werde. Es ist eine seltsame Methode, ein Programm zu verpacken, aber es ist zu umgehen. Ein paar Probleme mit ein paar Systemen, die wir hier verwenden (Ich muss Code aus den 70ern lieben).
Das obige könnte in Perl oder Python geschrieben werden, aber Bash wäre die bevorzugte Methode
echo $1 shift echo $*
ist ein Beispiel dafür, wie man Shift für zukünftige Leute verwendet, die danach suchen, es ausführen./script.sh cmd1 cmd2 cmd3 cmd4
und es setzt $ 1 auf cmd1 und der Rest wird cmd2 cmd3 cmd4 sein, wie ich wollte$#
wird um 1 reduziert, es sei denn, es ist bereits 0. Sie können auchshift
ein numerisches Argument angeben, um um mehr als eine Stelle zu verschieben.echo "$@"
anstelleecho $*
oderecho "$*"
seit dem nicht zitierten$*
Formular und dem zitierten Formular die Argumente "reduzieren", die normalerweise nicht gewünscht werden.SOME_VAR=$1; shift; some_cmd "$*"
. Jetztsome_cmd
wird args 2..n übergeben. Funktioniert super ... Danke!SOME_VAR=$1; shift; some_cmd "$@"
da"$@"
sichergestellt wird, dass maskierte Leerzeichen mit einem Backslash vor dem Leerzeichen übergeben werden."$*"
wird das\
ZeichenAls Programmierer würde ich dringend davon abraten,
shift
da Operationen, die den Status ändern, große Teile eines Skripts beeinflussen und das Verstehen, Ändern und Debuggen erschweren können: heat_smile:. Sie können stattdessen Folgendes verwenden:#!/usr/bin/env bash all_args=("$@") first_arg=$1 second_args=$2 rest_args=("${all_args[@]:2}") echo "${rest_args[@]}"
quelle
REST_ARGS
hier). Verwenden Sie ein Array (wieALL_ARGS
) und erweitern Sie es mit[@]
doppelten Anführungszeichen.bash
Snippet mit deiner Empfehlung umschreiben oder ein anderes Snippet schreiben? Ich würde es sehr gerne besser verstehen und in einigenbash
Skripten verwenden, an denen ich gerade arbeite. Vielen Dank im Voraus und weiter so!./script "foo" "bar" "six * nine"
, wird "sechs <Liste der Dateien im aktuellen Verzeichnis> neun" gedruckt.