【问题标题】:Install grails as another user with sudo使用 sudo 作为另一个用户安装 grails
【发布时间】:2015-05-01 11:56:07
【问题描述】:

我想在我的 vagrant provision bootstrap bash 文件中安装 grails(以 root 身份执行)。我尝试更改安装,如grails manual 所示:

curl -s get.gvmtool.net | sudo -u vagrant -H bash
sudo -u vagrant -H bash "$HOME/.gvm/bin/gvm-init.sh"
sudo -u vagrant -H bash gvm install grails

但这会产生错误:

bash: /root/.gvm/bin/gvm-init.sh: Permission denied
bash: gvm: No such file or directory

我做错了什么?

【问题讨论】:

  • 那可能是什么错误?
  • 首先你不应该运行初始化脚本,但你必须获取它。第二个问题是,gvm 是一个 shell 函数,没有脚本。我会确保采购发生在您的 vagrant 用户的 .profile 中,然后“bash -c 'gvm install grails' 可以通过 sudo 工作。尝试一下我会从 sudo -u vagrant -H bash -i 开始并尝试制作它首先在用户内部工作。
  • -i If the -i option is present, the shell is interactive. 为什么会有帮助? vagrant provision 脚本根本不是交互式的;)
  • 使用本地帐户进行测试将有助于理解 gvm 的工作原理(它获取 gvm-init 并提供函数 gvm)。它必须至少是一行:'bash -c "source ...gvm-init.sh; gvm install grails"'
  • The -i (simulate initial login) option ... This means that login-specific resource files such as .profile or .login will be read by the shell. If a command is specified, it is passed to the shell for execution.

标签: grails sudo gvm


【解决方案1】:

这可以工作:

curl -s get.sdkman.io | sudo -u vagrant -H bash -i
sudo -u vagrant -H bash -i 'source "$HOME/.sdkman/bin/sdkman-init.sh"; sdk install grails'

-i(模拟初始登录)选项
...这意味着特定于登录的资源文件,例如 .profile 或 .login 将被 shell 读取。如果指定了命令,则将其传递给 shell 执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 2012-07-15
    • 2023-03-07
    • 1970-01-01
    相关资源
    最近更新 更多