我想做类似的事情:
schroot -c name -u root "export A=3 && export B=4"
但我得到了错误:
Failed to execute “export”: No such file or directory
换句话说,我希望能够在schroot环境中以编程方式执行 shell 命令。获得这种行为的正确方法是什么?
我建议:
schroot -c name -u root sh -c "export A=3 && export B=4"
或更好:
schroot -c name -u root -- sh -c "export A=3 && export B=4"
这将运行带有“-c”选项的 shell,告诉它(shell)读取以下参数作为要执行的命令(脚本)。相同的技术适用于其他类似的命令:'su'、'nohup'、...
该--
选项终止参数schroot
并确保命令行其余部分的任何选项都传递给 shell 并由 shell 解释,而不是由schroot
. 这是SR_在评论中建议的,并且手册页schroot
也建议也应该使用它(搜索“分隔符”)。默认情况下,GNUgetopt()
函数会置换参数,这在此处不需要。--
防止它在--
.
schroot -c name -u root -- export A=3 && export B=4
确保 /etc/schroot/schroot.conf 有
run-exec-scripts=true
run-setup-scripts=true
你可以试试
schroot -c name -u root "/bin/bash -c 'export A=3; export B=4'"
但这是我第一次听说 schroot。并且导出看起来毫无用处......即使直接从命令行运行双引号的东西,似乎子shell也不想影响父环境。