Bash:传递 2 个字符串参数或更好地运行一系列命令的 Chroot 命令

Posted

技术标签:

【中文标题】Bash:传递 2 个字符串参数或更好地运行一系列命令的 Chroot 命令【英文标题】:Bash: Chroot command passing 2 string parameters or better run a series of commands 【发布时间】:2010-07-28 18:57:18 【问题描述】:

我想做这样的事情:

chroot /mount-point /path/to/script $var1 $var 2

这行得通吗? chrooted Perl 脚本会在这两个参数上传递吗? 如果没有,该怎么做?

要不然有什么办法可以简单的在脚本里做chroot,然后开始做命令之类的

perl script.pl $var1 $var2 etc?

据我了解,只需在bash 中按顺序写入它们只会在chroot 完成后执行它们,并且控制权返回到我没有安装perl 的位置(它是一个运行从PXE)。

【问题讨论】:

【参考方案1】:

Chroot 应该可以很好地处理这个问题。只要确保您的 perl 脚本可以从 chroot 上下文中找到 Perl 解释器,Perl 可执行文件可以找到它需要的共享库,并且您的变量(如果它们包含路径)具有相对于新根而不是旧根的路径.你可能想编译一个静态链接的 perl 可执行文件,如果这比在 chroot 中复制所需的共享库更容易的话。

【讨论】:

你能扩展一下编译静态链接的 perl 可执行文件吗?在执行 chroot 并传递我想要的参数之后,这可能是我的下一个问题。 好的,因为这有效,我没有收到进一步的回复,将标记为答案。基本上完整的答案是: chroot /mount-point /path/to/script "$var1" "$var2" 如果 $var1 和 $var2 中有任何空格或 shell 字符,您必须引用它们才能使它们完整地通过。 Re:static 链接,您应该运行“ldd /path/to/your/perl”并查看它需要哪些库。然后,您可以将它们与 perl 可执行文件本身一起复制到 chroot 区域。如果出于某种原因您不想复制这些库,则需要静态重建 Perl。有关如何执行此操作的说明在 Perl 源发行版随附的 INSTALL 文件中 - 配置选项是 -Uusedl,或者您可以在交互式配置中进行设置。【参考方案2】:

或者您可以使用 Expect,它是一种用于与输入/输出交互的脚本语言。 http://en.wikipedia.org/wiki/Expect

【讨论】:

以上是关于Bash:传递 2 个字符串参数或更好地运行一系列命令的 Chroot 命令的主要内容,如果未能解决你的问题,请参考以下文章

bash 记录

shell中的参数引用

如何在bash脚本中传递两个参数或参数[重复]

检查传递的参数是不是是 Bash 中的文件或目录

Bash脚本不处理传递的输入参数[重复]

python系列教程193——参数传递