Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
请帮我解密这行bash脚本代码_Bash_Resty - Fatal编程技术网

请帮我解密这行bash脚本代码

请帮我解密这行bash脚本代码,bash,resty,Bash,Resty,这是什么意思 h2t=$((exec 2>&-; (which lynx >/dev/null && echo lynx -stdin -dump) \ || which html2text || which cat) |tail -n 1) 好的,h2t=…表示它正在设置一个变量 我以为双参数是用于算术运算的。如果是这样的话,我在那里看不到任何算法,我完全困惑不解 当然,在这行代码上面有一个15行的注释块,解释了它的意图。不幸的

这是什么意思

  h2t=$((exec 2>&-; (which lynx >/dev/null && echo lynx -stdin -dump) \
            || which html2text || which cat) |tail -n 1)
好的,
h2t=…
表示它正在设置一个变量

我以为双参数是用于算术运算的。如果是这样的话,我在那里看不到任何算法,我完全困惑不解

当然,在这行代码上面有一个15行的注释块,解释了它的意图。不幸的是,这个评论是古苏美尔语的unicode版本,我无法解释它

**只是开玩笑!没有评论

附录:这是我在对我的回答的评论中发现的。事实证明,外部的
$()
会分配一个命令行,这取决于能够将HTML转换为文本的各种工具的可用性

因此
h2t
包含
lynx-stdin-dump
命令行,或者失败(即
lynx
不可用),
html2text
或者作为最后手段
cat
。后两个的命令来自
调用,前者来自
echo


它将HTML从标准文本转换为文本

让我们把它分开

  • exec 2>&-
    在子shell中设置重定向(关闭
    stderr
    ,IIRC)
  • 下一个子shell尝试查看lynx是否已安装并运行它,从
    stdin
    获取输入
  • |
    后面的其他部分没有多大意义,因为它们只评估是否安装了
    html2text
    cat
    ,而不运行它们
  • 然后我们从第一个子壳中取出最后一行
擦掉它。因为它是一个
回音
它什么都不做。在我看来像是原型

将其拆分以使其更具可读性:

$(
    exec 2>&-
      (
        which lynx >/dev/null &&
        echo lynx -stdin -dump
      ) ||
    which html2text ||
    which cat
  ) |
  tail -n 1
)
在对我的回答的评论中,我发现了它。事实证明,外部的
$()
会分配一个命令行,这取决于能够将HTML转换为文本的各种工具的可用性

因此
h2t
包含
lynx-stdin-dump
命令行,或者失败(即
lynx
不可用),
html2text
或者作为最后手段
cat
。后两个的命令来自
调用,前者来自
echo


它将HTML从标准文本转换为文本

让我们把它分开

  • exec 2>&-
    在子shell中设置重定向(关闭
    stderr
    ,IIRC)
  • 下一个子shell尝试查看lynx是否已安装并运行它,从
    stdin
    获取输入
  • |
    后面的其他部分没有多大意义,因为它们只评估是否安装了
    html2text
    cat
    ,而不运行它们
  • 然后我们从第一个子壳中取出最后一行
擦掉它。因为它是一个
回音
它什么都不做。在我看来像是原型

将其拆分以使其更具可读性:

$(
    exec 2>&-
      (
        which lynx >/dev/null &&
        echo lynx -stdin -dump
      ) ||
    which html2text ||
    which cat
  ) |
  tail -n 1
)

我不记得消除语法歧义的确切规则,但应该这样分析:

h2t=$(
       (exec 2>&-; (which lynx >/dev/null && echo lynx -stdin -dump) ||
         which html2text ||
         which cat) |
       tail -n 1
     )

换句话说,一种命令替换,由一个子shell组成,该子shell通过管道传输到
tail
。子shell用于为
exec
命令提供一个“作用域”,然后另一个子shell启动一个列表,该列表的3个命令由
|
运算符分隔。

我不记得消除语法歧义的确切规则,但应该这样解析:

h2t=$(
       (exec 2>&-; (which lynx >/dev/null && echo lynx -stdin -dump) ||
         which html2text ||
         which cat) |
       tail -n 1
     )

换句话说,一种命令替换,由一个子shell组成,该子shell通过管道传输到
tail
。子shell用于为
exec
命令提供一个“作用域”,然后另一个子shell启动一个列表,该列表的3个命令由
|
操作符分隔。

它是否真的说
$(
?是-请查看源代码。它是否真的说
$((
?是-请参阅以获取源代码。实际上,它只为变量分配了或多或少合适的命令行,其目的是将html转换为文本…如果
lynx
html2text
可用,则变量将包含具有该工具的适当命令行,否则,它将返回默认值猫的
@twalberg:很好,你是对的。把它编辑到我的答案中。剩下的保持原样。如果你决定写你自己的,让我知道,所以我会删除我的。好的,它选择了一个html2text程序来运行,因此命名为var
h2t
。它没有运行它。它只是找到它,并且失败了lynx或html2text,选择ses cat。如果你真的把这个写进你的答案中,我会接受的!谢谢,@0xC000002L,我已经接受了。“应用程序未能正确初始化”@Cheeso:你的意思是
0xC000002L
?->
状态访问被拒绝
…大多数人把这个缩短为
SAD
,这让我非常恼火;)实际上,它只为一个变量分配了一个或多或少合适的命令行,其目的是将html转换为文本…如果
lynx
html2text
可用,该变量将包含一个具有该工具功能的适当命令行,否则,它将返回默认值
cat
@twalberg:good catch,你是对的。将它编辑到我的答案中。保留其余部分不变。如果你决定编写你自己的,请告诉我,我将删除我的。好的,它选择一个html2text程序来运行,因此命名为var
h2t
。它没有运行它。它只是找到它,如果lynx或html2text失败,则选择cat。如果你真的把它放在你的答案中回答我会接受的!谢谢,@0xC0000022L,我已经接受了。“应用程序未能正确初始化”@Cheeso:你的意思是
0xC000002L
?->
STATUS\u ACCESS\u DENIED
…大多数人把它缩短为
SAD
,这让我非常恼火;)