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