You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过单行命令切换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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 21:45:40