bash – “<<(command-here)”shell成语导致“重定向意外
这个命令工作正常:
$bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer) 但是,我不明白如何将完全稳定作为参数传递给curl下载的shell脚本.这就是我无法在我自己的shell脚本中实现相同功能的原因 – 它给了我./foo.sh:2:语法错误:重定向意外: $cat foo.sh #!/bin/sh bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer) 所以,问题是:这个稳定的参数究竟是如何进入脚本的,为什么这个命令中有两个重定向,以及如何更改此命令以使其在我的脚本中运行? 解决方法
关于“重定向意外”错误:
这与稳定无关,它与使用/ bin / sh的脚本相关,而不是bash. <()语法在POSIX shell中不可用,其中包括作为/ bin / sh调用时的bash(在这种情况下,出于兼容性原因,它会关闭非标准功能). 让你的shebang线#!/ bin / bash. 理解< <()成语: 为了清楚发生了什么 – <()被替换为一个文件名,该文件名指的是它运行的命令的输出;在Linux上,这通常是/ dev / fd / ##类型文件名.正在运行< <(command),然后,正在获取该文件并将其指向您的stdin ...这与管道的行为非常接近. 要理解为什么这个成语有用,请比较一下: read foo < <(echo "bar") echo "$foo" 对此: echo "bar" | read foo echo "$foo" 前者有效,因为读取是由同一个shell执行的,后来回应结果.后者不会,因为读取是在子shell中运行的,该子shell是为了设置管道然后被销毁而创建的,因此变量不再存在于后续的echo中. 了解bash -s stable: bash -s表示要运行的脚本将在stdin上进入.然后,所有参数都被提供给$@数组中的脚本($1,$2等),因此当运行stdin上的脚本运行时,stable变为$1. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |