scrivere - bash linux



Propaga tutti gli argomenti in uno script di shell bash (5)

Per bash e altre shell di tipo Bourne:

java com.myserver.Program "[email protected]"

https://ffff65535.com

Sto scrivendo uno script molto semplice che chiama un altro script, e ho bisogno di propagare i parametri dal mio script corrente allo script che sto eseguendo.

Ad esempio, il mio nome di script è foo.sh e chiama bar.sh

foo.sh:

bar $1 $2 $3 $4

Come posso farlo senza specificare esplicitamente ciascun parametro?


Usa "[email protected]" invece di semplice [email protected] se davvero desideri che i tuoi parametri vengano passati uguali.

Osservare:

$ cat foo.sh
#!/bin/bash
baz.sh [email protected]

$ cat bar.sh
#!/bin/bash
baz.sh "[email protected]"

$ cat baz.sh
#!/bin/bash
echo Received: $1
echo Received: $2
echo Received: $3
echo Received: $4

$ ./foo.sh first second
Received: first
Received: second
Received:
Received:

$ ./foo.sh "one quoted arg"
Received: one
Received: quoted
Received: arg
Received:

$ ./bar.sh first second
Received: first
Received: second
Received:
Received:

$ ./bar.sh "one quoted arg"
Received: one quoted arg
Received:
Received:
Received:

Usa "[email protected]" (funziona per tutti i compatibili POSIX ).

[...], bash presenta la variabile "$ @", che si espande su tutti i parametri della riga di comando separati da spazi.

Da Bash con l'esempio .


My SUN Unix ha molte limitazioni, anche "$ @" non è stato interpretato come desiderato. La mia soluzione alternativa è $ {@}. Per esempio,

#!/bin/ksh
find ./ -type f | xargs grep "${@}"

A proposito, dovevo avere questo particolare script perché anche il mio Unix non supporta grep -r


Funziona bene, tranne se hai spazi o caratteri di escape. Non trovo il modo di acquisire argomenti in questo caso e di inviarlo a uno ssh all'interno dello script.

Questo potrebbe essere utile ma è così brutto

_command_opts=$( echo "[email protected]" | awk -F\- 'BEGIN { OFS=" -" } { for (i=2;i<=NF;i++) { gsub(/^[a-z] /,"&@",$i) ; gsub(/ $/,"",$i );gsub (/$/,"@",$i) }; print $0 }' | tr '@' \' )




scripting