题
这个问题已经有一个答案在这里:
- 如何确定是否给予Linux是32位或64位? 21的答案
我写的一个庆典脚本处理一些安装一个自动化的方式...我有可能得到一个这样的方案在32或64位的二进制...是否有可能检测机构从砸所以我可以选择正确的二元?
这将为Ubuntu的机器。
解决方案
做
uname -a
给你任何东西可以使用?我没有64位计算机,以测试。
注意到从麦克石: 这一工作,虽然具体地说
uname -m
会给"x86_64"的64位,和别的东西对于其他32位类型(在我的32位的VM,这是"i686").
其他提示
MACHINE_TYPE=`uname -m`
if [ ${MACHINE_TYPE} == 'x86_64' ]; then
# 64-bit stuff here
else
# 32-bit stuff here
fi
getconf LONG_BIT
似乎做的伎俩,这使它更容易检查,因为这将返回简单的整数而不是一些复杂的表达。
if [ `getconf LONG_BIT` = "64" ]
then
echo "I'm 64-bit"
else
echo "I'm 32-bit"
fi
小心,在一个 chroot
ed32位env,uname仍然是回答喜欢的64位主机系统。
getconf LONG_BIT
工作正常。
file /bin/cp
或任何熟知的可执行或图书馆应该做的伎俩如果你没有getconf(但你可以存储程序,不能使用,也许不在这个地方)。
你可以使用,后续脚本(i取这种正式的脚本"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
==================================================================================
我在做一个脚本来检测"建筑",这是我的简单的代码(我采用与葡萄酒,我的窗户的游戏,在Linux下,通过每个的游戏,我使用非同一版本的WineHQ,下载从"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
==================================================================================
现在我用这在我砸脚本,因为运作更好地在任何发行版的.
# 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
记住,还有其他的CPU系结构比Intel/AMD...
你可以做像这样的东西:
if $(uname -a | grep 'x86_64'); then
echo "I'm 64-bit"
else
echo "I'm 32-bit"
fi
是的, uname-a 应该做的伎俩。参见: http://www.stata.com/support/faqs/win/64bit.html.