複数の機能を使用してbashスクリプトでsudoコマンドを実行しますか?

複数の機能を使用してbashスクリプトでsudoコマンドを実行しますか?

私が使ったスクリプトから基本この関数は、すべての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_ssinstall_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

おすすめ記事