如何通过单行命令切换Linux用户身份并执行指定命令?
需求背景
当前本地Linux环境登录用户为user_c,已配置sudo免密,需要通过单行命令完成:切换为user_o身份后执行whoami命令。
常规两行操作逻辑为先执行sudo -i -u user_o进入user_o的登录shell,再执行whoami。
之前错误写法的原因
- 执行
sudo -i -u user_o && echo "$(whoami)":&&后续命令在当前user_c的父shell中等待sudo进程退出后才会运行,sudo打开的user_o交互shell退出后才触发后续逻辑,命令根本不会在user_o身份下执行。 - 执行
sudo -i -u user_o echo "$(whoami)":双引号包裹的$(whoami)属于命令替换,会在sudo命令启动前就被当前user_c的shell解析执行,实际传给sudo的参数是echo user_c,输出自然是原用户名。
该写法实际输出:
user_c
- 执行
runuser -l user_o -c 'echo "$(whoami)"':runuser命令仅允许root用户调用,普通用户user_c无执行权限,会直接抛出权限错误。
正确单行命令
如果仅需要执行whoami单条命令,最简写法直接将命令追加在sudo参数后即可:
sudo -i -u user_o whoami
执行后直接输出user_o,符合预期。
如果需要在user_o身份下连续执行多条命令,用单引号包裹所有待执行逻辑,传给shell的-c参数即可,单引号内的内容不会被当前shell提前解析替换:
sudo -i -u user_o bash -c 'whoami && 其他需要执行的命令'
内容的提问来源于stack exchange,提问作者Tms91
相关产品推荐
相关产品推荐

