使用依赖项重新分发bash脚本

时间:2012-07-26 17:33:24

标签: bash

我编写了一个相当广泛的BASH脚本来执行一系列任务。在此主脚本中,将调用其他脚本。打包此脚本以便其他用户可以使用基本脚本的最佳方法是什么。

我想过几个方法: 发送所有依赖项以及主脚本: 这可能会遇到问题,其他用户不了解如何将脚本放入他们的PATH,但是很容易发送。

将所有脚本的内容作为函数添加到master: 这将需要相当多的重写,以便可以访问所有脚本。然后,如果我将来做出改变,那么让我更难以使用子脚本保持Master当前。

任何人都可以想到另一种打包一组脚本(和可执行文件)的方法,这样接收它的最终用户很容易以最少的麻烦运行包吗?

2 个答案:

答案 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