su的-c选项
-c
选项在su
命令中的作用是指定要执行的命令。也就是说,它允许你在切换到目标用户后立即执行一个命令,然后返回到原来的用户会话。
例:
sudo su game -c "/bin/sh /export/install/example.sh"
当使用 -c
选项时,su
切换到 game
用户后,会立即执行 /bin/sh /export/install/example.sh
脚本。执行完脚本后,用户会话会自动结束并返回到原来的用户。这个过程是非交互的。
不使用 -c
的情况
你可以不使用 -c
选项直接切换到 game
用户,并在切换用户后手动执行命令。例如:
sudo su game
/bin/sh /export/install/example.sh
以上命令会:
-
切换到
game
用户,并进入一个交互式 shell 环境。 -
在交互式环境中手动运行
/bin/sh /export/install/example.sh
。
结束 game
用户会话后,你需要手动退出以返回到原来用户的会话,这种情况下是交互的。
使用 -c
选项的好处
-
自动化: 当你需要自动执行某个命令如脚本并且不希望有人工干预时,
-c
选项非常有用。例如,在脚本中调用或通过调度程序(如cron
)定期运行任务时,使用-c
可以简化操作。 -
简洁性: 使用
-c
选项可以使命令更加简洁,一行命令可以完成所有操作。避免了手动切换用户和执行命令的过程。
不使用 -c
选项的情况
-
交互式需求: 当你需要切换到目标用户并持续在用户环境中做更多操作时,不使用
-c
选项更合适。例如,在调试、测试或其他需要长时间驻留在目标用户会话中的情况。
实际示例对比
使用 -c
选项
sudo su game -c "/bin/sh /export/install/example.sh"
-
切换到
game
用户并立即运行指定的脚本。 -
执行完后自动退出。
不使用 -c
选项
sudo su game
-
切换到
game
用户,进入交互式 shell。 -
手动运行脚本:
/bin/sh /export/install/example.sh
-
手动退出
game
用户会话:exit
两种方式各有优缺点,主要取决于你的使用场景和需求。