【问题标题】:shell scripting that uses sudo su - team and perform rest command under this sudo access only使用 sudo su - team 并仅在此 sudo 访问下执行 rest 命令的 shell 脚本
【发布时间】:2014-06-04 12:58:56
【问题描述】:
#!/bin/bash
sudo su - team  //// this will change user to team
<somecommnand>

这里我有一些命令,如 sqlplus,仅在此权限下运行。

但是,这个脚本首先要求输入密码,然后我给出密码,但它不会像运行其他命令一样。

如何编写使用 sudo su 的脚本并在它下面的脚本中运行所有命令。

【问题讨论】:

    标签: linux shell sqlplus sudo su


    【解决方案1】:

    您有多种选择。

    1. 您可以将 sudo 命令移到脚本之外,然后让人们这样称呼它:

      sudo -u team /path/to/your/script
      
    2. 您可以将sudo 命令放在一个脚本中,而您想要以提升的权限运行的实际命令则放在另一个脚本中。也就是说,人们运行your_script,它看起来像:

      #!/bin/sh
      sudo -u team /path/to/your_script.real
      

      your_script.real 包含您想以提升的权限运行的命令。

    3. 如果您真的希望所有内容都在同一个脚本中并且您不介意过于聪明,您可以使用sudo 让脚本检查重新执行自身,如下所示:

      #!/bin/sh
      
      TEAM_UID=500 # replace with correct uid
      
      if [ "$UID" != $TEAM_UID ]; then
          exec sudo -u team $0
      fi
      
    4. 您还可以从 stdin 向 shell 提供命令,如下所示:

      #!/bin/sh
      sudo su - team <<'EOF'
      echo my uid is $UID
      EOF
      

    【讨论】:

    • 我只需要通过脚本执行以下操作: 1>与用户团队合作; 2> 第一个结果到 /home/team(sid1) 3> 然后我必须去团队 h 4> 然后 sqlplus commnad 将工作
    • 而您接受的答案不会那样做。这里提供的选项之一会,但您当然没有义务相信我!祝你好运。
    • 你能不能只帮我一件事#!/bin/bash sudo su - vapo 这个脚本要求输入密码,提供密码后它也会运行它下面的命令跨度>
    【解决方案2】:

    您可以尝试将所有命令放在同一行并用';'分隔它们。

    例如。 '须藤苏;一些命令;另一个命令'

    还可以作为预期用户运行该脚本。

    【讨论】:

    • 那根本行不通。 somecommand 只会在 sudo exits 之后执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多