【问题标题】:Getting ksh: NF: not found on executing ssh command获取 ksh: NF: not found on execution ssh 命令
【发布时间】:2021-08-07 14:47:18
【问题描述】:

我的以下命令抛出错误,例如:ksh: NF: not found.

sshpass -p 'pass' ssh -o StrictHostKeyChecking=no user awk -v columnCount=64 -F '\\|' 'NF && NR > 1  && NR < 12058  && NF != columnCount+1 {exit 1}' /var/prod/scms/landing/store_data_20201202010002.dat && echo 'success' || echo 'failed'

谁能帮帮我,我做错了什么。

【问题讨论】:

  • 这里的字段分隔符到底是什么?
  • @michjnich |符号
  • 不确定在这种情况下是否需要双重转义。可能是在扔东西......

标签: bash shell awk ssh ksh


【解决方案1】:

原代码为:

sshpass -p 'pass' ssh -o StrictHostKeyChecking=no user awk -v columnCount=64 -F '\\|' 'NF && NR > 1  && NR < 12058  && NF != columnCount+1 {exit 1}' /var/prod/scms/landing/store_data_20201202010002.dat && echo 'success' || echo 'failed'

相关部分为:ssh user awk -F '\\|' 'NF &amp;&amp; NR &gt; 1'

  1. 本地 shell 会去除单引号(在解析命令行时),因此 ssh 永远不会看到它们。
  2. ssh 将其参数连接成一个字符串并将其传递给远程 shell。
  3. 远程 shell 从 ssh 接收:awk -F \\| NF &amp;&amp; NR &gt; 1
  4. 这是一个管道 (|),后跟一个控制命令 (&amp;&amp;)
  5. 因此,远程 shell 尝试并行运行 awkNFawk 标准输出连接到 NF 标准输入。
  6. 找不到名为 NF 的程序,因此远程 shell 会抛出所见的错误。
  7. 由于管道失败,&amp;&amp; 之后的命令没有执行,因此重定向(&gt; 1)不会发生,也不会尝试运行命令NR

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 2021-08-11
    • 2021-01-28
    • 2021-02-23
    • 2013-01-26
    • 2010-12-09
    • 2010-10-06
    相关资源
    最近更新 更多