CMD aus git bash starten und exe ausführen

Homoioteleuton

Lt. Commander
Registriert
Nov. 2008
Beiträge
1.592
Hey!

Ich möchte ein Skript zum Laufen bekommen, dass u.A. aus der git bash heraus die cmd.exe aufruft und dort eine exe mit Parametern ausführt.
Leider scheitert das ausführen der exe, ex öffnet sich die cmd, aber nichts passiert...

Minimales Beispiel:
Bash:
#!/bin/bash

cmd.exe /C "start /wait ""miniconda_py311.exe"

# bzw.

cmd.exe /C "start /wait ""miniconda_py311.exe /InstallationType=JustMe /RegisterPython=0 /S /D=%cd%\ai_miniconda"

Das Skript lädt die aktuelle Version von Miniconda und soll es auf meinem System installieren im Silent-Mode
 
Zuletzt bearbeitet:
Und die git bash läuft auf einem Linux- oder Windowssystem?
 
Hast du es mal mit einem einfacheren Kommando/Programm probiert? Das einfach was ausgibt und dann abwartet?
Ansonsten ist generell die erste Vermutung bei sowas ein Problem mit Escape-Zeichen.
 
kartoffelpü schrieb:
Und die git bash läuft auf einem Linux- oder Windowssystem?
Ah, die ganze Zeit im Kopf gehabt und dann doch vergessen.
System ist Windows 11 64 Bit.

Habe schon probiert, einfach ein echo helloworld auszugeben, das klappt auch nicht.

Wenn ich nur die exe in der CMD aufrufen, startet der Installer, mit Parametern dann auch der Silent-Install. Nur das Aufrufen aus dem Skript klappt nicht...
Ergänzung ()

BeBur schrieb:
Hast du es mal mit einem einfacheren Kommando/Programm probiert? Das einfach was ausgibt und dann abwartet?
Ansonsten ist generell die erste Vermutung bei sowas ein Problem mit Escape-Zeichen.
Das vermute ich auch, aber ich komme nicht dahinter...
 
Irgendwas passt doch mit den Anführungszeichen nicht, so wie sie gerade gesetzt sind.
Ich würde es so
cmd.exe "start /wait miniconda_py311.exe"
versuchen
 
  • Gefällt mir
Reaktionen: BFF
Das hatte ich tatsächlich aus unsrem Firmen-Git übernommen...
Funktioniert aber auch nicht...
 
Ehm, ich meine da fehlt ein /c. Kann es nicht testen, da ich am Handy bin.

Code:
cmd.exe /c "echo Test"
 
oh, sorry, das ist irgendwie auch verschwunden, habe es schin mit und ohne getestet.

Habe jetzt mal manuell aus der git-bash gestartet und da ist das gleiche Problem. Irgendwie scheint die Übergabe des Befehls an die cmd nicht zu klappen.

Code:
cmd "/C start /wait .\miniconda_py311.exe"

Startet den Installer, aber wenn ich die weiteren Parameter anhängen möchte, klappt es nicht mehr...
Getting closer
 
Zuletzt bearbeitet:
Und wie hängst Du die Parameter an.
Mach dich mal das hier rein was Du tipst.
 
Code:
cmd.exe "/C start /wait .\miniconda_py311.exe /InstallationType=JustMe /RegisterPython=0 /S /D=%cd%\ai_miniconda"
 
Ins blaue geraten:
Code:
cmd.exe /c start "" /wait miniconda_py311.exe /InstallationType=JustMe /RegisterPython=0 /S /D=%cd%\ai_miniconda
 
  • Gefällt mir
Reaktionen: mae1cum77
Dann kommt:
Der Befehl "egisterPython" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Also wieder vermutlich die Escape-Sequenz...
 
Und wenn du den eigentlichen Install-Befehl auch in Anführungszeichen setzt, also:
Code:
cmd.exe /c start "" /wait "miniconda_py311.exe /InstallationType=JustMe /RegisterPython=0 /S /D=%cd%\ai_miniconda"

An anderen Stellen ergeben die Anführungszeichen hier keinen Sinn. Einmal der Titell ("" heißt kein Titel) und der eigentliche Befehl.
 
Alternativ erstmal den Befehl aus einer cmd heraus validieren und wenn das funktioniert, dann aus git bash heraus probieren und die Eigenheiten der git bash anwenden.
 
Der Befehl selbst hatte ja schon funktioniert.

Nachdem ich jetzt alle erdenkbaren Kombis von Anführungszeichen durch habe, habe ich die Lösung gefunden. An sich hatte ich es wohl früher schon, aber der Ziel-Pfad wurde scheinbar nicht korrekt übergeben, bzw hatte cmd Probleme mit dem %cd% Befehl in dem Argument.
Für alle interessierten Leute, hier ist das finale Skript:

Bash:
#!/bin/bash

# Automatically downloads, installs a Miniconda enviroment with the currently required packages and requested python version
# tested on Linux and Windows with git bash

SCRIPT_DIR=$(dirname $(readlink -f $0))

#Get requested Version
VERSION=$(echo $1 | tr -d '.')
PYTHON_NAME="py$VERSION"

echo $PYTHON_NAME


# Download Miniconda
if [[ $OSTYPE = "cygwin" ]]; then
    OSNAME="Windows"
elif [[ $OSTYPE = "msys" ]]; then
    OSNAME="Windows"
elif [[ $OSTYPE = "win32" ]]; then
    OSNAME="Windows"
else
    OSNAME="Linux"
fi

if [[ $OSNAME = "Windows" ]]; then
    FILENDING=".exe"
else
    FILENDING=".sh"
fi

EXPECTED_FILENAME="Miniconda3-"$PYTHON_NAME"_[0-9][0-9].[0-9].[0-9]-[0-9]-"$OSNAME"-x86_64"$FILENDING
echo $EXPECTED_FILENAME

MINICONDA_REPOSITORY="https://repo.anaconda.com/miniconda/"
FILE=$(curl $MINICONDA_REPOSITORY -s | grep $EXPECTED_FILENAME | tail -1 | cut -d'"' -f 2)
FULLPATH=$MINICONDA_REPOSITORY$FILE
OUTPUT_FILE="miniconda_"$PYTHON_NAME$FILENDING
#curl $FULLPATH -o $OUTPUT_FILE

TARGET=$PWD"/ai_miniconda"
TARGET2=$(cygpath -w $TARGET)
TARGET3="C:\Sources\ai_miniconda"
echo Target1
echo $TARGET
echo Target2
echo $TARGET2
echo Target3
echo $TARGET3
echo done
sleep 1

# Install Miniconda in current directory
if [[ $OSNAME = "Windows" ]]; then

    cmd.exe "/C start /wait echo $OUTPUT_FILE ^& mkdir ai_miniconda ^& $OUTPUT_FILE /S /InstallationType=JustMe ^/^RegisterPython=0 ^/^D=$TARGET2 ^& echo done... ^& sleep 2 ^& exit

    #$OUTPUT_FILE  /InstallationType=JustMe /RegisterPython=0 /S /D=%cd%\ai_miniconda"
else
    bash $OUTPUT_FILE -b -p $PWD"/ai_miniconda"
fi
sleep 2
 

Ähnliche Themen

Antworten
12
Aufrufe
15.279
Zurück
Oben