(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 :
-s
Lire les commandes à partir de l'entrée standard.S'il n'y a pas d'opérandes et que le
-c
l'option n'est pas spécifiée, le-s
l'option doit être supposée.