1
votes

Comment exécuter des commandes bash depuis pwsh?

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 commentaires

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.


3 Réponses :


0
votes

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]...
...


0 commentaires

0
votes

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"
  }
}

Fonction multiplateforme

Invoke-Expression "/bin/bash ant -version"


0 commentaires

1
votes

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 .


0 commentaires