我下面的命令抛出错误,如:未找到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'
- 本地shell去掉单引号(在解析命令行时(,因此ssh永远看不到它们
- ssh将其参数连接到一个字符串中,并将其传递给远程shell
- 远程shell从ssh接收:
awk -F \| NF && NR > 1
- 这是一个管道(
|
(,后面跟着一个控制命令(&&
( - 因此,远程shell尝试并行运行
awk
和NF
,awk
stdout连接到NF
stdin - 找不到名为
NF
的程序,因此远程shell抛出所看到的错误 - 由于管道出现故障,
&&
之后的命令不会执行,因此重定向(> 1
(不会发生,也不会尝试运行命令NR