Path &引用;su-用户“;在编写脚本时工作不一样

Path &引用;su-用户“;在编写脚本时工作不一样,path,su,Path,Su,我有一个安装在“/home/user”下的程序,它的命令只有在我从命令行执行时才起作用,如下所示: root@server:~# su - user user@server:~# command 但是,我尝试编写以下命令的脚本: su - user -c 'command' 尽管脚本执行且命令为“运行”,但程序的某些部分无法正常工作 我确保$PATH变量在“root”和“user”之间是相同的,并将/home/user/.profile中的两个环境变量添加到根变量中 命令行与脚本中的“su-

我有一个安装在“/home/user”下的程序,它的命令只有在我从命令行执行时才起作用,如下所示:

root@server:~# su - user
user@server:~# command
但是,我尝试编写以下命令的脚本:

su - user -c 'command'
尽管脚本执行且命令为“运行”,但程序的某些部分无法正常工作

我确保$PATH变量在“root”和“user”之间是相同的,并将/home/user/.profile中的两个环境变量添加到根变量中


命令行与脚本中的“su-user”有什么特别之处?我如何解释缺失的内容?

我无法确定命令隐藏部分的不同之处。但我想指出一些可能有帮助的地方:

  • 考虑一下单配额和双配额之间的区别:
    'command'
    “command”
    。后者将扩展内容:因此,如果我在shell中编写
    su-myname-c'echo$PATH'
    ,我会看到一个与
    su-myname-c“echo$PATH”截然不同的路径

  • 尝试通过“调试”来了解更多信息,如
    su-myname-c“echo SHOW\u ME\u SOMETHING”
    。也许您可以观察到
    命令的子部分以不同的方式工作

  • 路径的处理很棘手,这意味着在不同的系统上会有不同重置状态的登录模拟。请看这里:


希望这能有所帮助。

不知何故,我偶然发现了答案。我假设我找到了一个文件(并定义了$PATH)在/etc/bash.bashrc中,任何地方都可以使用。显然情况并非如此。因此,我在/home/user/.profile中再次获取了该文件的源代码,现在它可以工作了。@corebunchr:感谢您提交最终解决方案,我相信它会在某个时候帮助某人:-)