我寫一個bash腳本,以應對自動化的方式有些設備...我有32或64位二進制得到這樣一個程序的可能性...它可以檢測從bash的機器架構,所以我可以選擇正確的二進制?是否可以在bash腳本中檢測32位與64位?
這將是Ubuntu機器。
我寫一個bash腳本,以應對自動化的方式有些設備...我有32或64位二進制得到這樣一個程序的可能性...它可以檢測從bash的機器架構,所以我可以選擇正確的二進制?是否可以在bash腳本中檢測32位與64位?
這將是Ubuntu機器。
是否
uname -a
給你什麼,你可以使用嗎?我沒有64位機器來測試。
從斯通注:這工作,但具體
uname -m
會給 「x86_64的」 爲64位,和別的其他32種類型(在我的32位虛擬機,它是「i686」)。
在32位機器上,不建議使用這種方法,因爲答案將是i386,i686等......我建議採用`getconf LONG_BIT`方法。 – Speredenn 2014-04-25 14:38:09
@Speredenn上面不檢查32位的名稱,例如i386,i686等,但爲64位名稱。你的爭用是沒有意義的,除非還有可能返回的x86_64同義詞(例如amd64,但它可以嗎?) – 2014-07-25 17:34:45
你可以做這樣的事情:
if $(uname -a | grep 'x86_64'); then
echo "I'm 64-bit"
else
echo "I'm 32-bit"
fi
有點愚蠢,使用`uname -a`然後`grep`而不是直接使用`uname -m` – MestreLion 2013-03-25 12:13:02
MACHINE_TYPE=`uname -m`
if [ ${MACHINE_TYPE} == 'x86_64' ]; then
# 64-bit stuff here
else
# 32-bit stuff here
fi
是,UNAME -a應該做的伎倆。見:http://www.stata.com/support/faqs/win/64bit.html。
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 ...
getconf LONG_BIT
似乎這樣的伎倆,以及,這使得它更容易來檢查這一點,因爲這將返回簡單的整數,而不是一些複雜的表達。
if [ `getconf LONG_BIT` = "64" ]
then
echo "I'm 64-bit"
else
echo "I'm 32-bit"
fi
可以使用,後續的腳本(我提取這種從 「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 "[email protected]"
done
============== ================================================== ==================
我正在一個腳本來檢測「建築」,這是我簡單的代碼(我用它用酒,我Windows遊戲,在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
============================================ ======================================
現在我在bash中使用腳本,因爲在任何發行版中效果更好。
# 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
小心,在chroot
ED 32位的env,通過uname仍然回答像64位主機系統。
getconf LONG_BIT
工作正常。
file /bin/cp
或任何着名的可執行文件或庫應該做的伎倆,如果你沒有getconf(但你可以存儲你不能使用的程序,也許沒有在這個地方)。
檢測到什麼?中央處理器? OS? Userland可用性的CPU架構?當OS爲32位時返回64位的`/ proc/cpuinfo`在大多數情況下並不是非常有用。 – jww 2017-03-29 10:20:41