(2 réponses)
Fermé il y a 9 mois.
Comment exécuter un script bash avec des paramètres :
./foo.sh a b c
Lorsqu'il est compressé (par exemple, en utilisant xz ).
xzcat foo.sh | bash <<how_to_supply_here_parameters?>>
Cas d'utilisation spécifique :
J'ai produit un très gros rmlint.sh fichier et stockez-le compressé :
time rmlint -o sh:stdout -c sh:hardlink|tee >( xz > rmlint.sh.xz )
Par conséquent, j'exécuterais normalement
./rmlint.sh -d -x -p
Cependant, le fichier est trop volumineux pour être décompressé. Par conséquent, j'aimerais faire la même chose en le canalisant vers bash :
xzcat rmlint.sh.xz | bash ...
Réponse acceptée :
Vous devez utiliser le -s option et -- pour séparer les arguments que vous souhaitez transmettre :
echo 'echo "[email protected]"' | sh -s 3 4 5
echo 'printf "{%s}" "$0"; printf " {%s}" "[email protected]"; echo' |
sh -s -- -d -x -p --foo=bar
{sh} {-d} {-x} {-p} {--foo=bar}
Cela devrait fonctionner avec n'importe quel shell POSIX, pas seulement bash . À partir de susv4 :
-sLire les commandes à partir de l'entrée standard.S'il n'y a pas d'opérandes et que le
-cl'option n'est pas spécifiée, le-sl'option doit être supposée.