【问题标题】:Bash script process substitution Syntax error: "(" unexpectedBash 脚本进程替换语法错误:“(”意外
【发布时间】:2015-11-09 09:59:35
【问题描述】:

我想运行这个脚本:

#!/bin/bash
echo <(true)

我运行它:

sh file.sh

我得到 "Syntax error: "(" unexpected" 。我发现了一些类似的情况,但仍然无法解决这个问题。 我是 shell scripting 的初学者,但据我所知:

  1. 我使用的shebang是正确的,并且选择了bash shell,所以进程替换语法应该可以工作
  2. 我从命令行尝试了同样的方法,它可以工作。我检查了echo $0,它给了我 "bash" ,那么在命令行中运行命令和调用相同 shell 的脚本有什么区别?

也许这很简单,但我找不到解释或解决方案。

【问题讨论】:

  • 如何运行这个脚本?我可以用sh ./script.sh 重现这个。
  • @Cyrus 我不能和./file.sh:) 即它应该对我有用。
  • 如果还没有解决,那么

标签: linux bash shell process-substitution


【解决方案1】:

您应该使用bash 运行您的脚本,即bash ./script.sh 或在将其设置为可执行后通过./script.sh 使用shebang。正如 Cyrus 所评论的那样,只有使用 sh ./script.sh 运行它才会得到您的错误。

另请参阅:role of shebang at unix.SE

【讨论】:

  • 我使用了 sh file.sh... 我假设它总是查看 shebang 声明。感谢您的链接,它对我帮助很大 - 当我在命令行中指定解释器时,shebang 被忽略了。所以我应该使用“bash file.sh - 从命令行确定解释器或 ./file.sh - 从 shebang 声明确定”
  • @KatrinnaL ./file.sh 是首选;文件的 shebang 行应该“知道”要使用哪个 shell,而您可能不知道。使用bash file.sh 的唯一真正原因是shebang 错误(或丢失)或文件不可执行——但在这些情况下,最好先解决问题,然后使用./file.sh
【解决方案2】:

从您的~/.bashrc~/.profile(等)文件中删除export POSIXLY_CORRECT=1

问题在于进程替换是一个附加的 bash 功能,它不是 posix 标准的一部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多