【问题标题】:schroot: pass a command to be executed as if it’s in a shellschroot:传递要执行的命令,就好像它在 shell 中一样
【发布时间】:2010-06-19 05:49:42
【问题描述】:

我想做这样的事情:

schroot -c name -u root "export A=3 && export B=4"

但我得到了错误:

Failed to execute “export”: No such file or directory

换句话说,我希望能够在schroot 环境中以编程方式执行shell 命令。获得这种行为的正确方法是什么?

【问题讨论】:

  • 我认为这个问题可能属于 ServerFault,而不是 StackOverflow。

标签: linux unix chroot


【解决方案1】:

我推荐:

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_comment 中提出的,schroot 的手册页也建议使用它(搜索“分隔符”)。默认情况下,GNU getopt() 函数会置换参数,这在此处不需要。 -- 阻止它在 -- 之后排列参数。

【讨论】:

  • 使用-- 防止第二个-c 选项被解释为另一个schroot 选项。 schroot -c name -u root -- sh -c "export A=3 && export B=4"
  • @SR_ 仅适用于此处,它可能是一个答案,而不仅仅是评论!
【解决方案2】:
schroot -c name -u root -- export A=3 && export B=4

确保 /etc/schroot/schroot.conf 有

run-exec-scripts=true
run-setup-scripts=true

【讨论】:

    【解决方案3】:

    你可以试试

    schroot -c name -u root "/bin/bash -c 'export A=3; export B=4'"
    

    但这是我第一次听说 schroot。而且导出看起来毫无用处......即使直接从命令行运行双引号的东西,似乎子shell也不想影响父环境。

    【讨论】:

    • 如果您改为使用schroot -c name -u root /bin/bash -c 'export A=3; export B=4',我认为对于更复杂的命令,引用会更好。
    • 可能。但就像我说的,我以前从未见过 schroot。我不确定命令是否必须是一个字符串或什么。
    猜你喜欢
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    相关资源
    最近更新 更多