基本上,我相信Bruno Bronosky在这里的回答可以回答我的问题...
How do I redirect output to a variable in shell?
...但是他编写代码的方式使我感到困惑。
我有一个卖方专有的脚本(small_script),该脚本实际上是关于哪个用户运行该脚本(仅已登录的用户)的。
我写了一个较大的脚本来帮助在Linux上安装,我希望我的large_script调用此small_script。
我的large_script必须由sudo调用(由于它安装了一堆软件)
如果由sudo或root执行,Small_script拒绝执行
可能的解决方案是使用变量:
myuser=$(whoami)
sudo -Hu ${myuser} ./small_script.sh
这行不通,因为自从我对命令执行命令后,whoami就以root身份报告了
因此,我需要设置一个变量($ myuser),其输出是whoami的输出之前,我可以运行这些代码行,以便看起来当前登录的用户是真正的人执行代码。
同样,用户Bruno Bronosky似乎有正确的主意,但我对他的回答感到很困惑:
# my example above as a oneliner
series | of | commands | (read string; mystic_command --opt "$string" /path/to/file) | handle_mystified_file
sudo -Hu '# 1000' ./small_script.sh
可以,但是我需要它在当前登录的用户(可能不是userid 1000)上运行。
sudo -Hu $USER ./script.sh
此操作无法运行,并给出一个错误,认为用户名为空。
myuser=$(whoami)
sudo -Hu ${myuser} ./script.sh
这会误以为它是根。
答案 0 :(得分:1)
幸运的是,sudo
为环境变量(SUDO_USER
和SUDO_UID
)提供了相关的用户信息,以适应这种情况。您应该可以使用:
sudo -Hu "$SUDO_USER" ./script.sh
顺便说一句,请忽略Bruno Bronosky对另一个问题的回答。他将竭尽全力来满足“重定向”的要求,而不是实际完成预期目标的其他操作。