【问题标题】:bash rematch as chrootbash 重新匹配为 chroot
【发布时间】:2018-02-12 18:29:15
【问题描述】:

我在我的脚本中使用它,它在我的根服务器和我测试的其他一些服务器上运行良好。

但是在我的虚拟主机(Hosted Plesk)上使用它时有一个问题:chrooted shell,它不输出任何东西。干脆放弃。我的虚拟主机说我需要使用绝对路径,但我不知道如何在 bash 重新匹配中应用它。

#!/bin/bash 
str='"<result="Abc1234" />"'
regex='<result="([0-9a-zA-Z._-/:]*)" />'
[[ $str =~ $regex ]] && echo ${BASH_REMATCH[1]}

(我在这里的第一篇文章,如果我忘记了什么或整篇文章格式错误,请见谅)

【问题讨论】:

标签: bash chroot


【解决方案1】:

在下面的问题讨论中,事实证明该问题与服务器上的不同默认语言环境有关。确保您使用正确的语言环境运行命令:

LANG=en_US.UTF-8 bash script.sh

(en_US.UTF-8) 在您的情况下证明是正确的语言环境。


PS:还请记住Ondrej K. 所说的内容。

【讨论】:

    【解决方案2】:

    代替:

    regex='<result="([0-9a-zA-Z._-/:]*)" />'
    

    说:

    regex='<result="([0-9a-zA-Z._/:-]*)" />'
    

    - 被移动到它不再被认为是一个范围的地方。

    实际上,我很惊讶它在其他系统上也能正常工作。我已经用; echo $? 替换了&amp;&amp; echo ${BASH_REMATCH[1]}(这是另一个可能的调试步骤)并且得到了2,根据man bash 的意思是“语法不正确的正则表达式”。

    如果这没有帮助。我们必须看到不同的原因,我们的 shell 解释脚本的方式,但无论如何打印返回状态可能是下一步要采取的步骤。

    【讨论】:

    • 好点。但事实证明,这并不是这里的主要问题。
    • 是的,你在讨论我正在输入这个。仍然感到惊讶的是,我的(主要是香草 4.4.18)bash 会像描述的那样拒绝它。发现另一个主机 4.3.48,同样的事情。我会使用en_US.UTF-8,但设置LANG=C,两种方式都没有区别。无论如何,很好的收获。语言环境可能是颈部疼痛。
    猜你喜欢
    • 2010-09-20
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 2012-02-28
    • 2011-12-09
    • 1970-01-01
    • 2015-04-29
    相关资源
    最近更新 更多