〖 Linux 〗 Shell 과 일부 파일 을 하나의 단독 '실행 가능 한 파일' 로 간단하게 포장 합 니 다.
10780 단어 linux
압축 패 키 지 를 공유 하려 면 상대방 에 게 어떤 스 크 립 트 를 풀 고 실행 하 는 지 가르쳐 야 한다. 전송 해 야 할 내용 이 많 으 면 불편 하 다.
Shell 스 크 립 트 와 파일 을 '단독 실행 가능 한 파일' 로 포장 합 니 다. 상대방 이 이 파일 을 받 았 습 니 다. 이 파일 을 실행 하기 만 하면 압축 을 풀 고 해당 스 크 립 트 를 실행 할 수 있 습 니 다. 상대 적 으로 편리 합 니 다.
#!/bin/bash -
#===============================================================================
#
# FILE: shell_pack.sh
#
# USAGE: ./shell_pack.sh
#
# DESCRIPTION:
#
# OPTIONS: ---
# REQUIREMENTS: ---
# BUGS: ---
# NOTES: ---
# AUTHOR: lwq (28120), [email protected]
# ORGANIZATION:
# CREATED: 04/22/2015 02:38:01 PM CST
# REVISION: ---
#===============================================================================
#=== FUNCTION ================================================================
# NAME: usage
# DESCRIPTION: Display usage information.
#===============================================================================
function usage ()
{
cat <<- EOT
Usage : $0 -p package -s script file1 file2 file3 ..
Options:
-h|help Display this message
-p|package The output package name
-s|script The script will run when unpack package
Other The all files what you want to pack
EOT
} # ---------- end of function usage ----------
#-----------------------------------------------------------------------
# Handle command line arguments
#-----------------------------------------------------------------------
while getopts ":hp:s:" opt
do
case $opt in
h|help ) usage; exit 0 ;;
p|package ) package_name=$OPTARG ;;
s|script ) install_script=$OPTARG ;;
\? ) echo -e "
Option does not exist : $OPTARG
"
usage; exit 1 ;;
esac # --- end of case ---
done
shift $(($OPTIND-1))
if [[ -z $package_name ]]; then
echo "package_name can't not be empty"
usage
exit
fi
if [[ -z $package_name ]]; then
echo "install_script can't not be empty"
usage
exit
fi
files=$@
generate_wrapper_script(){
local install_script=$1
local wrapper_script=$2
cat <<-'EOT' >$wrapper_script
#!/bin/sh
echo "begin ..."
unpackdir=/tmp/$(basename $0)_unpack
rm -rf $unpackdir 2>/dev/null
mkdir -p $unpackdir
echo "unpacking ..."
sed '1, /^#__SCRIPTEND__/d' $0 | tar zxf - -C $unpackdir
if [ $? -ne 0 ]; then
echo "unpack package failed."
exit 1
fi
echo ""
echo "installing ..."
cd $unpackdir
EOT
cat <<-EOR >>$wrapper_script
chmod +x $install_script
./$install_script
EOR
cat <<-'EOE' >>$wrapper_script
if [ $? -ne 0 ]; then
echo "install failed."
exit 2
elif [[ -d $unpackdir ]]; then
rm -rf $unpackdir
fi
echo "install ok, enjoy!"
exit 0
#__SCRIPTEND__
EOE
}
tarfile=package_content_$$.tgz
wrapfile=wrap_$$.sh
echo -e "start packing ..
"
tar zcvf $tarfile $files $install_script
generate_wrapper_script $install_script $wrapfile
cat $wrapfile $tarfile > $package_name
chmod +x $package_name
echo -e "
output: $package_name
"
rm -f $tarfile
rm -f $wrapfile
파일 내용 을 셸 에 저장pack. sh, 사용 방법 예:
./shell_pack.sh -p logcat_install -s logcat_install.sh logcat_all.sh logcat_wrapper.sh vmstat2
실행 가능 한 파일 "logcat install"을 만 들 고 logcat 을 실행 합 니 다.install 시, 자신의 파일 에 있 는 tar. gz 파일 을 압축 해제 하고, 관건 적 인 스 크 립 트 logcat 를 실행 합 니 다.install.sh
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.