【问题标题】:Syntax error: redirection unexpected [duplicate]语法错误:重定向意外[重复]
【发布时间】:2013-12-09 09:06:56
【问题描述】:

我运行了一个部署脚本来将我的服务器设置为 root。然后我尝试运行另一个名为 test.sh 的脚本,其中包含以下几行:

# Logging
exec  > >(tee -a /var/log/test_full.log)
exec 2> >(tee -a /var/log/test_error.log)

但是当我尝试这个时,我得到了以下错误:

test.sh: 19: test.sh: Syntax error: redirection unexpected

您认为导致此问题的原因可能是什么?我以前没有听说过这个错误。

【问题讨论】:

    标签: linux bash shell debian


    【解决方案1】:

    假设您使用 ./myscript 运行脚本,请确保您的脚本以

    开头
    #!/bin/bash
    

    而不是#!/bin/sh 或其他任何东西。该错误表明使用了 Bash 以外的其他 shell。

    如果您的脚本确实如此,请检查 /bin/bash 是否不是符号链接,并且它确实是带有 /bin/bash --version 的 Bash。

    【讨论】:

    • 同上,两个文件都以#!/bin/bash开头
    • /bin/bash --version 输出什么?
    • 感谢您的帮助,但我在您的帮助下解决了这个问题,我害怕只能选择一个答案,但我希望投票有所帮助:)
    • 公平地说,@Louis 的评论可能是导致解决此案的因素。他的回答 +1,你的问题 +1 :)
    • +1 我一直处于/bin/bashbusybox 的符号链接的环境中,这意味着shell 是ash 而不是bash...
    【解决方案2】:

    This answer 解决了你的问题,假设你的脚本 sn-p 是完整的。

    简而言之,您是通过dash 运行脚本,而不是bash。解决方法很简单,只需添加必要的#!/bin/bash

    如果缺少#!,系统默认运行的内容因系统而异。在我的系统上,我没有收到您的错误,因为默认情况下会运行一个了解您的重定向的 shell。我不得不模拟dash 将是默认shell 来重现您的错误的情况。

    【讨论】:

    • 嗨。很抱歉,这两个文件都以 #!/bin/bash 开头
    • 事实:当我以bash test.sh 运行你的test.sh 脚​​本时没有错误,但是当我使用dash test.sh 运行它时,我得到了你得到的确切错误。无论出于何种原因存在于您的系统中,执行脚本的不是 bash
    • 啊,我想是因为我运行了“sh test.sh”!
    猜你喜欢
    • 2019-12-22
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 2016-04-11
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    相关资源
    最近更新 更多