J'ai une ligne de commande qui génère une ligne de commande différente, par exemple:
> commandlineA param1 param2
commandlineB param1
Je voudrais avoir une seule exécution en ligne de commande qui exécutera commandlineB avec le ou les paramètres donnés.
Existe-t-il un moyen simple de le faire à l'aide d'une seule ligne de commande ou dois-je exécuter un petit fichier bash qui stockera la sortie dans une variable, puis l'exécutera?
Merci
ubuntu
command-line
bash
Lior Ohana
la source
la source
Réponses:
Vous semblez avoir réglé cela vous-même, mais vous pouvez utiliser:
Edit of edit: ce qui suit est quelque peu faux, alors qu'il exécute la commande dans un sous-shell, il s'avère que les variables d'environnement seront toujours disponibles. Désolé d'avoir induit les gens en erreur ...
Edit: qui s'exécutera dans un sous-shell, aucune variable d'environnement non exportée ne sera utilisée. Si vous souhaitez exécuter une commande dans le même shell, vous devez utiliser:
Une autre réponse donnée est de passer par bash lui-même:
Cela s'exécutera également dans un sous-shell, pour fonctionner dans le même shell dont vous aurez besoin:
Par ailleurs, vous pouvez également utiliser des ticks arrière au lieu de la syntaxe $ (), mais ce n'est pas recommandé .
la source
eval
ici. Si vous avez une raison, veuillez l'expliquer. (3) Votre dernier exemple (avec-c
) est totalement faux.Utilisez ceci:
Exemple:
Production:
la source
$(commandlineA param1 param2)
printf '\143\144\040\057\n' | bash
est finalement un no-op, car la commande est exécutée dans un nouveau processus shell séparé (et transitoire). En revanche,$(printf '\143\144\040\057\n')
le shell actuel, actif et interactif changera de répertoire.