我编写了一个相当广泛的BASH脚本来执行一系列任务。在此主脚本中,将调用其他脚本。打包此脚本以便其他用户可以使用基本脚本的最佳方法是什么。
我想过几个方法: 发送所有依赖项以及主脚本: 这可能会遇到问题,其他用户不了解如何将脚本放入他们的PATH,但是很容易发送。
将所有脚本的内容作为函数添加到master: 这将需要相当多的重写,以便可以访问所有脚本。然后,如果我将来做出改变,那么让我更难以使用子脚本保持Master当前。
任何人都可以想到另一种打包一组脚本(和可执行文件)的方法,这样接收它的最终用户很容易以最少的麻烦运行包吗?
答案 0 :(得分:1)
您可以在主脚本的开头修改PATH
,因为它听起来不像用户需要手动运行依赖项(即,在主脚本之外)。
答案 1 :(得分:0)
你可以使用这种方法在脚本中打包很多东西。 base-64文本是来自uuencode的包中所有文件的tar.gz文件。 此示例包含3个脚本。
#!/bin/bash
pushd /tmp && mkdir stuff$$here && pushd stuff$$here
if [[ $? != 0 ]]; then
echo "can't make /tmp/stuff$$here"
exit 1
fi
a=$(cat <<'@@@'
H4sIABWJEVAAA+3TsQ6CMBRA0c58RcVdWin0e9rGBBY1FOPvW2BxQScQ4j1p8pLXDl2uO8VGLEwl1lbD
1LZS73NSGqHPSpkynXrYW1vWQqqlPzZ4xN51UooQnh/ffbvfqeOh8O218C422SU0N5nH0LX3Xro8+/Xf
sDy/tf6tHvs3mv7XMNu/p/9/EDbWv1FT/2lF/yuY7T/QPwAAAAAAAAAAAADsyQsw5pIDACgAAA==
@@@
)
st=0
for (( i=0; i<"${#a}"; i++ ))
do
x=${a:$i:1}
in=$(($(expr index \
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' "\\$x")-1))
if [ $in -ge 0 ]; then case $st in
0 ) out=$(($in<<2)); st=3;;
1 ) out=$(($out|$in));
printf \\$(printf '%03o' $(($out&255)) ) ; st=0 ;;
2 ) out=$(($out+($in>>2)));
printf \\$(printf '%03o' $(($out&255)) ) ;
st=0; out=$(($in<<6)); st=1;;
* ) out=$(($out+($in>>4)));
printf \\$(printf '%03o' $(($out&255)) ) ;
st=0; out=$(($in<<4)); st=2;;
esac fi
done | (gzip -d |tar -xf - )
./a.sh
./b.sh
./c.sh
rm a.sh b.sh c.sh
popd
rmdir stuff$$here
popd
exit