【问题标题】:process substitution not working in bash script进程替换在 bash 脚本中不起作用
【发布时间】:2017-11-29 17:23:38
【问题描述】:

我遇到了奇怪的问题。从 bash 脚本调用进程替换时它不起作用,但是当我从终端拍摄它时它起作用。

这里是示例:在终端上运行时。

terminal>echo "$x"
a b c
d e f
g h i
j k l

terminal>echo "$y"
1
2
3
4

terminal>paste <(echo "$x") <(echo "$y") -d' '
a b c 1
d e f 2
g h i 3
j k l 4

这里是示例:示例脚本


    #!/bin/bash
    x='a b c
    d e f
    g h i
    j k l'


    y='1
    2
    3
    4'

    paste <(echo "$x") <(echo "$y") -d' '

当我上面的脚本,我得到以下错误:

test: line 12: syntax error near unexpected token `('
test: line 12: `paste <(echo "$x") <(echo "$y") -d' ''

以下是我正在使用的 shell 的详细信息。

echo $SHELL
/bin/bash
bash --version
GNU bash, version 4.2.47(1)-release (x86_64-suse-linux-gnu)

有没有其他方法可以绕过这个问题?不一定我想坚持流程替换。

所需的o/p:

a b c 1
d e f 2
g h i 3
j k l 4

【问题讨论】:

  • 您的脚本在我的 Debian jessie 上的 bash 4.3.30 中运行。您发布的脚本是您尝试执行的真实脚本吗?
  • 完全一样。
  • 它工作正常,你检查了CRLF DOS 结尾吗?可能是从 Windows 编辑器复制的?
  • 完美运行 - 在红帽机器上在线查看:tutorialspoint.com/…
  • 我相信你知道如何使用这些东西,我刚刚在另一台机器上进行了测试,它成功了。当 bash 处于 POSIX 模式时,BTW 进程替换不起作用.... 可能是这种情况吗?

标签: bash shell


【解决方案1】:

当 bash 处于 POSIX 模式时,进程替换不起作用。请禁用 POSIX,然后重试。

禁用:这将导致进程替换工作。

set +o posix

启用: : 这将导致进程替换不起作用。

set -o posix

【讨论】:

  • 感谢编辑。我在地铁上,一路都答不上来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-16
  • 2011-03-02
  • 2011-09-04
  • 1970-01-01
相关资源
最近更新 更多