如何运行 gnome-terminal -e“source activate”而没有权限被拒绝错误?

如何运行 gnome-terminal -e“source activate”而没有权限被拒绝错误?

如何从 bash 脚本运行“source activate”作为 gnome-terminal 的 -e 参数?

gnome-terminal -e ". /path/to/virtualenv/bin/activate"

当我运行此命令时,我期望出现一个已运行该命令的新终端source activate。但事实是,我在当前窗口和新创建的窗口中都收到错误:错误:无法执行子进程“。”(权限被拒绝)

我觉得我可能犯了一个简单的疏忽,或者误解了 -e 论点。

在 bash 脚本或终端窗口中运行该命令会得到相同的结果。sudo给出相同的结果,所以我认为权限问题表明我没有按照我认为的那样使用上面的命令进行操作。

答案1

这是因为.( source) 是 shell 内置命令,即 shell 特定的命令,而不是外部命令。您需要在 shell 内部运行它;如果没有 shell,gnome-terminal则会尝试执行.以 作为其参数的文字命令/path/to/virtualenv/bin/activate,从而导致权限拒绝错误。

您需要生成一个交互式 shell 来执行采购,然后生成另一个交互式 shell:

gnome-terminal -e 'bash -ic ". /path/to/virtualenv/bin/activate && bash"'

当您尝试启动虚拟环境时,您可能想要设置选项--rcfile,而不是更清洁的方法,但明显的警告是通用会话启动文件/etc/bash.bashrc不会~/.bashrc被读取:

gnome-terminal -e 'bash --rcfile /path/to/virtualenv/bin/activate'

相关内容