获取 ksh:NF:在执行 ssh 命令时找不到

Getting ksh: NF: not found on executing ssh command

我的以下命令抛出错误,如: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'

任何人都可以在这里帮助我,我做错了什么。

原代码为:

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 && NR > 1'

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