Nous avons un script PowerShell qui est à 99% multiplateforme, mais nous avons parfois besoin d'une branche IF LINUX THEN en raison de la différence de gestion des services Windows et Linux.
Nous aimerions exécuter la commande kill
depuis bash mais c'est un alias du PowerShell Stop-Process
.
Comment exécuter des commandes bash natives comme ps
, kill
et ls
partir de Powershell.
Notez que sh ps
ou bash ps
ne fonctionnent pas.
PS > bash ps /usr/bin/ps: /usr/bin/ps: cannot execute binary file
3 Réponses :
Si vous connaissez l'emplacement de la commande, vous pouvez simplement l'exécuter:
which kill | select -first 1 | % {iex "$_ 123"} kill: sending signal to 123 failed: No such process
Sinon, which
peut le trouver et l'exécuter avec Invoke-Expression
ou iex
:
which kill | iex
Cela peut devenir délicat car which
pourrait renvoyer plusieurs lignes que vous devrez ensuite deviner et prendre la première. Vous devez également ajouter des paramètres (par exemple 123
) à votre commande:
/usr/bin/kill Usage: kill [options] <pid|name]... ...
J'ai eu beaucoup de mal à exécuter ant -version
partir de pwsh mais cela fonctionne:
function RunCommand($Command) { if($env:OS -eq 'Windows_NT') { CMD /c $Command } else { Invoke-Expression "/bin/bash $Command" } }
Invoke-Expression "/bin/bash ant -version"
En supposant que l'exécution de bash
exécute bash à partir de pwsh, vous voudriez bash -c "ps"
. Normalement, l'argument de bash serait un script qu'il essaie d'exécuter, d'où l'erreur "impossible d'exécuter le fichier binaire". ps
n'est pas un script bash, mais un exécutable binaire. Le -c
, d'un autre côté, exécute du code bash arbitraire fourni comme argument de ligne de commande, qui peut évidemment exécuter des programmes comme ps
.
Si vous exécutez kill avec le préfixe \ et ainsi \ kill, il contournera tous les alias et exécutera l'exécutable.
Qu'en est-il de
bash ./path/to/script/that/calls/ps.sh
@RamanSailopal C'est vrai pour bash mais pas pour pwsh. L'exécution de
\kill
intérieur de PowerShell échoue avec CommandNotFoundException.