0

一連のタスクを実行するために、かなり大規模な BASH スクリプトを作成しました。このマスター スクリプト内で、他のスクリプトが呼び出されます。別のユーザーが基本スクリプトを使用できるように、このスクリプトをパッケージ化する最良の方法は何ですか?

私はいくつかの方法を考えました: すべての依存関係をマスター スクリプトと共に送信する: これにより、他のユーザーがスクリプトを PATH に配置する方法を理解していないという問題が発生する可能性がありますが、送信は簡単です。

すべてのスクリプトの内容を関数としてマスターに追加します。これには、すべてのスクリプトにアクセスできるように、かなりの書き直しが必要になります。その後、将来変更を加えた場合、添字を使用してマスターを最新の状態に保つことは非常に困難です。

一連のスクリプト (および実行可能ファイル) をパッケージ化して、それを受け取ったエンド ユーザーが最小限の労力で簡単にパッケージを実行できるようにする別の方法を考えられる人はいますか?

4

2 に答える 2

1

PATHユーザーが依存関係を手動で(つまり、マスタースクリプトの外部で)実行する必要があるようには思えないため、マスタースクリプトの最初で変更できます。

于 2012-07-26T17:37:35.167 に答える
0

このメソッドを使用して、スクリプトに多くのものをパッケージ化できます。base-64テキストは、パッケージ内のすべてのファイルのtar.gzファイルをuuencodeして作成したものです。この例には、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
于 2012-07-26T18:29:46.117 に答える