यह पता लगाने के लिए 32 बनाम बिट 64 बिट एक bash लिपि में संभव है?

वोट
63

मैं स्वचालित रूप से कुछ प्रतिष्ठानों से निपटने के लिए एक bash स्क्रिप्ट लिख रहा हूँ ... मैं में 32 या 64 बिट द्विआधारी ऐसे ही एक कार्यक्रम हो रही की संभावना है ... इसलिए मैं चयन कर सकते हैं यह संभव बैश से मशीन वास्तुकला पता लगाने के लिए है सही द्विआधारी?

यह Ubuntu मशीनों के लिए किया जाएगा।

19/09/2008 को 22:29
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


8 जवाब

वोट
42

कर देता है

uname -a

आप कुछ भी आप उपयोग कर सकते हैं दे सकता है? मैं एक 64-बिट मशीन पर परीक्षण करने के लिए नहीं है।


माइक स्टोन से ध्यान दें: यह काम करता है, हालांकि विशेष रूप से

uname -m

64 बिट के लिए "x86_64", और अन्य 32 बिट प्रकार के लिए कुछ और दे देंगे (मेरी 32 बिट वी एम में, यह "i686" है)।

19/09/2008 को 22:33
का स्रोत उपयोगकर्ता

वोट
4

आप कुछ इस तरह कर सकता है:

if $(uname -a | grep 'x86_64'); then
  echo "I'm 64-bit"
else
  echo "I'm 32-bit"
fi
19/09/2008 को 22:36
का स्रोत उपयोगकर्ता

वोट
69
MACHINE_TYPE=`uname -m`
if [ ${MACHINE_TYPE} == 'x86_64' ]; then
  # 64-bit stuff here
else
  # 32-bit stuff here
fi
19/09/2008 को 22:37
का स्रोत उपयोगकर्ता

वोट
-2

हाँ, uname -एक चाल करना चाहिए। देखें: http://www.stata.com/support/faqs/win/64bit.html

19/09/2008 को 22:37
का स्रोत उपयोगकर्ता

वोट
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


याद रखें, इंटेल / AMD के अलावा अन्य सीपीयू आर्किटेक्चर देखते हैं ...

19/09/2008 को 22:44
का स्रोत उपयोगकर्ता

वोट
51

getconf LONG_BIT साथ ही चाल करने के लिए जो यह और भी आसान यह जाँच करने के लिए के बाद से यह बस कुछ जटिल अभिव्यक्ति के बजाय पूर्णांक रिटर्न बनाता है लगता है,।

if [ `getconf LONG_BIT` = "64" ]
then
    echo "I'm 64-bit"
else
    echo "I'm 32-bit"
fi
05/09/2011 को 11:33
का स्रोत उपयोगकर्ता

वोट
8

आप उपयोग कर सकते हैं, का पालन लिपि (मैं आधिकारिक तौर पर "ioquake3" की पटकथा से निकालने): उदाहरण के लिए

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

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

मैं "वास्तुकला" पता लगाने के लिए एक स्क्रिप्ट बना रहा हूं, यह मेरा सरल कोड (मैं इसे का उपयोग कर रहा शराब के साथ, मेरे Windows खेलों के लिए, लिनक्स के तहत, प्रत्येक खेल से, मैं, WineHQ की diferrent संस्करण का उपयोग "PlayOnLinux" से डाउनलोड किया है साइट।

# 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

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

अब मैं अपने bash स्क्रिप्ट में इस का उपयोग करें, क्योंकि काम करता है किसी भी 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
18/10/2011 को 20:01
का स्रोत उपयोगकर्ता

वोट
11

सावधान रहें, एक में chrootएड 32-बिट env, uname अभी भी 64-बिट मेजबान सिस्टम की तरह उत्तर दे रहा है।

getconf LONG_BIT ठीक काम करता है।

file /bin/cp या किसी जाने-माने निष्पादन या लाइब्रेरी चाल अगर आप getconf की जरूरत नहीं है (लेकिन आप कार्यक्रमों आप उपयोग नहीं कर सकते स्टोर कर सकते हैं, और हो सकता है कि इस जगह पर नहीं हैं) क्या करना चाहिए।

12/12/2011 को 12:20
का स्रोत उपयोगकर्ता

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