Este posibil pentru a detecta 32 de biți vs 64 de biți într-un script bash?

voturi
63

I-am scris un script bash pentru a face față unor instalații într-un mod automatizat ... Am posibilitatea de a obține un astfel de program în 32 sau 64 de biți binar ... este posibil pentru a detecta arhitectura mașinii de la bash, așa că am putea selecta binar corect?

Acest lucru va fi pentru mașinile Ubuntu.

Întrebat 19/09/2008 la 22:29
sursa de către utilizator
În alte limbi...                            


8 răspunsuri

voturi
42

Face

uname -a

da tot ce se poate folosi? Nu am o mașină pe 64 de biți pentru a testa pe.


Nota de la Mike Stone: Acest lucru funcționează, deși în mod specific

uname -m

Va da „X86_64“ pentru 64 de biți, și altceva pentru alte tipuri de 32 de biți (în biți mea VM 32, este „i686“).

Publicat 19/09/2008 la 22:33
sursa de către utilizator

voturi
4

Ai putea face ceva de genul:

if $(uname -a | grep 'x86_64'); then
  echo "I'm 64-bit"
else
  echo "I'm 32-bit"
fi
Publicat 19/09/2008 la 22:36
sursa de către utilizator

voturi
69
MACHINE_TYPE=`uname -m`
if [ ${MACHINE_TYPE} == 'x86_64' ]; then
  # 64-bit stuff here
else
  # 32-bit stuff here
fi
Publicat 19/09/2008 la 22:37
sursa de către utilizator

voturi
-2

Da, -a uname ar trebui să facă truc. vezi: http://www.stata.com/support/faqs/win/64bit.html .

Publicat 19/09/2008 la 22:37
sursa de către utilizator

voturi
7
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


Amintiți-vă, există alte arhitecturi CPU decât Intel / AMD ...

Publicat 19/09/2008 la 22:44
sursa de către utilizator

voturi
51

getconf LONG_BIT pare să facă truc la fel de bine, ceea ce face chiar mai ușor pentru a verifica acest lucru, deoarece acest lucru pur și simplu returnează un întreg în loc de o anumită expresie complicată.

if [ `getconf LONG_BIT` = "64" ]
then
    echo "I'm 64-bit"
else
    echo "I'm 32-bit"
fi
Publicat 05/09/2011 la 11:33
sursa de către utilizator

voturi
8

Puteți utiliza, script-ul urmărire (i extrage din acest scenariu oficial de „ioquake3“): de exemplu,

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

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

Fac un script pentru a detecta „Arhitectura“, acest lucru este codul meu simplu (eu il folosesc cu vin, pentru jocurile mele Windows, sub Linux, de fiecare joc, am folosi versiunea diferrent a WineHQ, descărcat de la „PlayOnLinux“ site-ul.

# 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

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

Acum, am folosi acest lucru în script-urile mele bash, deoarece funcționează mai bine în orice distro.

# 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
Publicat 18/10/2011 la 20:01
sursa de către utilizator

voturi
11

Fii atent, într - un chroot32 de biți env ed, The uname este încă răspunde ca sistemul gazdă pe 64 de biți.

getconf LONG_BIT Merge bine.

file /bin/cp sau orice bine-cunoscut bibliotecă executabil sau ar trebui să facă truc, dacă nu aveți getconf (dar puteți stoca programe pe care nu le pot folosi, și poate că nu există în acest loc).

Publicat 12/12/2011 la 12:20
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more