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



我下面的命令抛出错误,如:未找到ksh:NF

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尝试并行运行awkNFawkstdout连接到NFstdin
  6. 找不到名为NF的程序,因此远程shell抛出所看到的错误
  7. 由于管道出现故障,&&之后的命令不会执行,因此重定向(> 1(不会发生,也不会尝试运行命令NR

最新更新