Ist es möglich, vs 64 Bit in einer Bash-Skript zu erkennen 32-Bit? [Duplikat]

StackOverflow https://stackoverflow.com/questions/106387

  •  01-07-2019
  •  | 
  •  

Frage

    

Diese Frage bereits eine Antwort hier:

         

Ich bin ein Bash-Skript zu schreiben mit einigen Installationen in einer automatisierten Art und Weise zu tun ... ich die Möglichkeit haben, in 32 oder 64 Bit ein solches Programm zu bekommen binären ... ist es möglich, die Maschinenarchitektur von bash zu erfassen, so ich kann die korrekte binäre wählen?

Dies wird für Ubuntu Maschinen sein.

War es hilfreich?

Lösung

Does

uname -a

geben Sie alles, was Sie können? Ich habe nicht eine 64-Bit-Maschine zu testen, auf.


Hinweis von Mike Stone: Das funktioniert, obwohl speziell

uname -m

geben "x86_64" für 64-Bit, und etwas anderes für andere 32-Bit-Typen (in meinen 32-Bit-VM, es ist "i686").

Andere Tipps

MACHINE_TYPE=`uname -m`
if [ ${MACHINE_TYPE} == 'x86_64' ]; then
  # 64-bit stuff here
else
  # 32-bit stuff here
fi

getconf LONG_BIT scheint auch den Trick zu tun, was es noch einfacher macht, dies zu überprüfen, da diese nur die Ganzzahl zurückgibt, anstatt einige komplizierte Ausdruck.

if [ `getconf LONG_BIT` = "64" ]
then
    echo "I'm 64-bit"
else
    echo "I'm 32-bit"
fi

Seien Sie vorsichtig, in einem chrooted 32-Bit-env wird die uname Beantwortung immer noch wie das 64-Bit-Host-System.

getconf LONG_BIT funktioniert.

file /bin/cp oder jede bekannte ausführbare Datei oder Bibliothek sollte es tun, wenn Sie getconf nicht haben (aber Sie können Programme speichern Sie nicht verwenden können, und vielleicht gibt es an dieser Stelle nicht).

Sie können mit, den Follow-Skript (i Diesen Auszug aus offiziell Skript von "ioquake3"): zum Beispiel

archs=`uname -m`
case "$archs" in
    i?86) archs=i386 ;;
    x86_64) archs="x86_64 i386" ;;
    ppc64) archs="ppc64 ppc" ;;
esac

for arch in $archs; do
    test -x ./ioquake3.$arch || continue
    exec ./ioquake3.$arch "$@"
done

=============================================== ===================================

ich ein Skript mache die „Architektur“ zu erkennen, das ist mein einfacher Code ist (ich benutze es mit Wein, für meine Windows-Spiele unter Linux, von jedem Spiel, ich benutze verschiedene Einrichtungs Version von WineHQ, heruntergeladen aus "PlayOnLinux" site.

# First Obtain "kernel" name
KERNEL=$(uname -s)

if      [ $KERNEL = "Darwin" ]; then
        KERNEL=mac
elif        [ $Nucleo = "Linux" ]; then
        KERNEL=linux
elif        [ $Nucleo = "FreeBSD" ]; then
        KERNEL=linux
else
        echo "Unsupported OS"
fi

# Second get the right Arquitecture
ARCH=$(uname -m)

if         [ $ARCH = "i386" ]; then
            PATH="$PWD/wine/$KERNEL/x86/bin:$PATH"
            export WINESERVER="$PWD/wine/$KERNEL/x86/bin/wineserver"
            export WINELOADER="$PWD/wine/$KERNEL/x86/bin/wine"
            export WINEPREFIX="$PWD/wine/data"
            export WINEDEBUG=-all:$WINEDEBUG
            ARCH="32 Bits"
    elif    [ $ARCH = "i486" ]; then
            PATH="$PWD/wine/$KERNEL/x86/bin:$PATH"
            export WINESERVER="$PWD/wine/$KERNEL/x86/bin/wineserver"
            export WINELOADER="$PWD/wine/$KERNEL/x86/bin/wine"
            export WINEPREFIX="$PWD/wine/data"
            export WINEDEBUG=-all:$WINEDEBUG
            ARCH="32 Bits"
    elif    [ $ARCH = "i586" ]; then
            PATH="$PWD/wine/$KERNEL/x86/bin:$PATH"
            export WINESERVER="$PWD/wine/$KERNEL/x86/bin/wineserver"
            export WINELOADER="$PWD/wine/$Nucleo/x86/bin/wine"
            export WINEPREFIX="$PWD/wine/data"
            export WINEDEBUG=-all:$WINEDEBUG
            ARCH="32 Bits"
    elif    [ $ARCH = "i686" ]; then
            PATH="$PWD/wine/$KERNEL/x86/bin:$PATH"
            export WINESERVER="$PWD/wine/$KERNEL/x86/bin/wineserver"
            export WINELOADER="$PWD/wine/$KERNEL/x86/bin/wine"
            export WINEPREFIX="$PWD/wine/data"
            export WINEDEBUG=-all:$WINEDEBUG
            ARCH="32 Bits"
         elif [ $ARCH = "x86_64" ]; then
            export WINESERVER="$PWD/wine/$KERNEL/x86_64/bin/wineserver"
            export WINELOADER="$PWD/wine/$KERNEL/x86_64/bin/wine"
            export WINEPREFIX="$PWD/wine/data"
            export WINEDEBUG=-all:$WINEDEBUG
            ARCH="64 Bits"
    else
        echo "Unsoportted Architecture"
fi

=============================================== ===================================

Jetzt benutze ich dies in meinem Bash-Skripte, weil besser funktioniert in jeder Distribution.

# Get the Kernel Name
Kernel=$(uname -s)
case "$Kernel" in
    Linux)  Kernel="linux"              ;;
    Darwin) Kernel="mac"                ;;
    FreeBSD)    Kernel="freebsd"            ;;
* ) echo "Your Operating System -> ITS NOT SUPPORTED"   ;;
esac

echo
echo "Operating System Kernel : $Kernel"
echo
# Get the machine Architecture
Architecture=$(uname -m)
case "$Architecture" in
    x86)    Architecture="x86"                  ;;
    ia64)   Architecture="ia64"                 ;;
    i?86)   Architecture="x86"                  ;;
    amd64)  Architecture="amd64"                    ;;
    x86_64) Architecture="x86_64"                   ;;
    sparc64)    Architecture="sparc64"                  ;;
* ) echo    "Your Architecture '$Architecture' -> ITS NOT SUPPORTED."   ;;
esac

echo
echo "Operating System Architecture : $Architecture"
echo
slot8(msd):/opt # uname -a
Linux slot8a 2.6.21_mvlcge500-electra #1 SMP PREEMPT Wed Jun 18 16:29:33 \
EDT 2008 ppc64 GNU/Linux
Denken Sie daran,


, gibt es andere CPU-Architekturen als Intel / AMD ...

Sie können etwas tun:

if $(uname -a | grep 'x86_64'); then
  echo "I'm 64-bit"
else
  echo "I'm 32-bit"
fi

Ja, uname -a sollte es tun. siehe: http://www.stata.com/support/faqs/win/ 64bit.html .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top