【问题标题】:bash cannot find .profile when run bash command from directories other than the $home directory从 $home 目录以外的目录运行 bash 命令时,bash 找不到 .profile
【发布时间】:2016-07-02 08:32:12
【问题描述】:

在我的 /home/user 目录中,显然有一个 .profile 文件。在这个目录中,我可以运行 bash 命令,例如$bash run.sh。但是在任何其他目录中,当输入$bash时,它总是报错

bash: .profile: No such file or directory

PS.:我需要在非根目录中运行$bash,因为我实际上有一个python脚本run.py,其中包含subprocess.call( ['bash', 'test.sh'], shell=True)这一行。运行这个 python 脚本时,bash 没有报错 .profile。

有人知道为什么吗?感谢您的帮助!

【问题讨论】:

  • run.sh 中有什么内容?是想直接获取.profile 还是什么?
  • 你是在root用户下运行python脚本吗?

标签: python bash shell


【解决方案1】:

请尝试此解决方案,并让我知道它是否有效 - 因为我无权访问您的脚本和/或文件结构,并且此问题是我在可用信息中唯一能看到的问题,我将介绍此问题作为一个可能的答案:

这可能是由于在使用 shell=True 参数时拆分您的输入造成的。根据文档,您必须像这样使用命令:

subprocess.call('bash test.sh', shell=True)

因为通过 shell 执行不需要经过净化的输入,即使这是一个安全隐患。

Source

【讨论】:

  • 您提议的脚本有效:subprocess.call('bash test.sh', shell=True) t 我拆分输入?
  • @leoking87 我很高兴它成功了!如果您发现该解决方案有帮助,请将其标记为对未来的程序员正确。您无法拆分输入的原因(我相信)是因为 bash 解析空格的方式与 Python 不同。如果没有shell=True,python 需要知道命令的每个部分在哪里开始和结束,然后才能将它们拼接在一起并执行。但是当你告诉它只使用 bash 时,它在读取自己的输入方面要好得多,命令不必被过滤——bash 擅长读取自己的输入。
  • @leoking87 例如,如果没有shell=True 命令,您就不必包含反斜杠来帮助 bash 解析空格。 Python 擅长这样做。如果您包含shell=True 并强制执行命令而不被Python 拼接在一起,您将不得不执行原始的bash 命令,包括反斜杠。您可以在包含shell=True 时使用反斜杠,然后在不使用shell=True 时将其删除。
猜你喜欢
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-02
  • 2015-10-31
  • 1970-01-01
  • 2011-10-10
  • 2013-03-02
相关资源
最近更新 更多