bash 스크립트에서 32 비트와 64 비트를 감지 할 수 있습니까?
이 질문에 이미 답변이 있습니다.
자동화 된 방식으로 일부 설치를 처리하기 위해 bash 스크립트를 작성 중입니다. 이러한 프로그램을 32 비트 또는 64 비트 바이너리로 가져올 수 있습니다. bash에서 시스템 아키텍처를 감지하여 선택할 수 있습니까? 올바른 바이너리?
이것은 Ubuntu 머신 용입니다.
않습니다
uname -a
사용할 수있는 건 뭐든지 줄까요? 테스트 할 64 비트 컴퓨터가 없습니다.
Mike Stone의 참고 사항 : 이 방법은
uname -m
64 비트에는 "x86_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
A의 조심 chroot
에디션 32 비트 ENV,은 uname는 여전히 64 비트 호스트 시스템과 같이 대답한다.
getconf LONG_BIT
잘 작동합니다.
file /bin/cp
또는 잘 알려진 실행 파일이나 라이브러리는 getconf가없는 경우 트릭을 수행해야합니다 (하지만 사용할 수없는 프로그램을 저장할 수 있으며 여기에 없을 수도 있음).
다음 스크립트를 사용할 수 있습니다 (공식적으로 "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
================================================ ===============================
"아키텍처"를 감지하는 스크립트를 만들고 있습니다. 이것은 제 간단한 코드입니다 (win, Windows 게임, Linux, 각 게임 별 WineHQ, "PlayOnLinux"에서 다운로드 한 다른 버전의 WineHQ 사용). 대지.
# 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
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
Intel / AMD 이외의 다른 CPU 아키텍처가 있습니다.
다음과 같이 할 수 있습니다.
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 .
'program tip' 카테고리의 다른 글
Android-툴바의 표준 높이 (0) | 2020.11.03 |
---|---|
127.0.0.1:27017에 연결하지 못했습니다. 이유 : errno : 111 연결이 거부되었습니다. (0) | 2020.11.03 |
fb : app_id 또는 fb : admins는 언제 필요합니까? (0) | 2020.11.02 |
std :: array에 배열을 채울 값을 취하는 생성자가없는 이유는 무엇입니까? (0) | 2020.11.02 |
Python에서 QR 코드 이미지를 디코딩하는 방법은 무엇입니까? (0) | 2020.11.02 |