Ist es möglich, vs 64 Bit in einer Bash-Skript zu erkennen 32-Bit? [Duplikat]
-
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.
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 chroot
ed 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 .