我有一个安装在“/ home / user”下的程序,如果我从命令行执行命令,它们的命令才有效:
root@server:~# su - user
user@server:~# command
但是,我试图像这样编写这些命令:
su - user -c 'command'
虽然脚本执行并且命令是“运行”,但程序的某些部分无法正常工作。
我确保“root”和“user”之间的$ PATH变量相同,并在/home/user/.profile中添加了几个环境变量到根目录变量。但仍然缺少某些东西。
命令行与脚本中的“su - user”有什么特别之处,如何解释缺少的内容?
答案 0 :(得分:0)
我无法确定命令隐藏部分的不同之处。但我想指出可能有所帮助的事情:
考虑单配额和双配额之间的区别:'command'
和"command"
。后者将扩展内容:http://www.howtogeek.com/howto/29980/whats-the-difference-between-single-and-double-quotes-in-the-bash-shell/因此,如果我在我的shell su - myname -c 'echo $PATH'
中写字,我会看到与su - myname -c "echo $PATH"
不同的路径。
尝试通过"调试"了解更多信息。比如su - myname -c "echo SHOW_ME_SOMETHING"
。也许您可以观察command
的子部分以不同的方式工作。
处理路径很棘手,这意味着在不同系统上存在使用不同重置状态的登录模拟。看看这里:https://superuser.com/questions/193277/what-happens-to-the-environment-when-you-run-su-c
希望这有帮助。