私が使ったスクリプトから基本この関数は、すべてのsudo操作を完了するために新しいsudo-bashを生成します。
#!/bin/bash
function sudo_stuffs() {
install_ss
}
function install_ss() {
echo something
}
main() {
# 切换目录
cd /tmp
if [[ ! -d "install_shadowsocks" ]]; then
mkdir install_shadowsocks
fi
cd install_shadowsocks
# 如果没有sudo权限
if ! sudo -v 1>/dev/null 2>&1 ; then
# 提示登录有权限的账户
echo "--- You don't have authority, login to the root or others in sudoers. ---"
exit 1
fi
export -f install_ss
FUNC=$(declare -f sudo_stuffs)
sudo bash -c "$FUNC; sudo_stuffs"
}
main "$@"
しかし実際にはsudo_stuffs機能とより詳細な機能は次のとおりです。 インストール_SS機能。
私はexport -f install_ss
install_ssがusingというサブシェルで見つかることも確認しましたsudo bash -c "$FUNC; sudo_stuffs"
。
しかし、結果はまだ出てきました。
bash:行2:install_ss:コマンドが見つかりません
どうですか?
ベストアンサー1
を使用しないでくださいfunction
。つまり、2-4行は次のようになります。
sudo_stuffs() {
install_ss
}
その後、呼び出すには次のようにします。
sudo_stuffs
最後に、ユーザーがrootでないときにroot権限を取得するには、スクリプトの先頭(1行目の後ろ)に次の3行を追加します。sudo
これは、ユーザーに実行権限があることを確認sudo
し(通常)パスワードを要求するスクリプトを実行することによって行われます。
if [ `id -u` -gt 0 ]; then
exec sudo "$0" "$@"
fi