shell – 将参数传递给另一个用户运行的命令

我有一个bash脚本应该采取一些参数,然后在不同的用户运行:test.sh

#!/bin/bash
sudo su user2 <<'EOF'
echo $1
EOF

但它打印空白:

$./test.sh haha

我知道这是因为环境变量被重置(?).我怎么能通过这个论点?安全方面我听说我不应该禁用环境重置.解决这个问题的唯一方法就是将$1写入文件,然后再通过user2将其读回.但我想应该有更好的方法.

最佳答案
如果您希望整个脚本作为另一个用户运行,我执行此操作的常用方法是在脚本的顶部添加类似于以下内容的内容:

target_user="foo"
if [ "$(whoami)" != "$target_user" ]; then
  exec sudo -u "$target_user" -- "$0" "$@"
fi

请注意,我在这里使用sudo而不是su. su使得正确传递参数变得愚蠢,而sudo没有这个问题.

如果您只想运行一小段代码,您可以选择执行以下操作:

target_user="foo"
sudo -u "$target_user" sh -s "$@" <<'EOF'
  echo "$@"
EOF

这将启动sh,将当前脚本的参数传递给它,然后执行通过heredoc提供的脚本.

转载注明原文:shell – 将参数传递给另一个用户运行的命令 - 代码日志