使用 plink.exe 时如何获取 ls 命令以在列中输出结果

问题描述

cmd 中使用 plink ssh 我的 MacOS 和 ls 目录。但是,结果在单列中。因为列表很长但名称很短,所以我试图在 3 或 4 列中显示结果,就像 ls 认在终端中所做的那样。使用 plink 时我无法做到这一点。

我尝试过的几个选项:

plink.exe -ssh -l <username> -pw <password> <IP> "ls /Users/Dir/"
plink.exe -ssh -l <username> -pw <password> <IP> "ls -c /Users/Dir/"
plink.exe -ssh -l <username> -pw <password> <IP> "ls /Users/Dir/ > Results.txt"
plink.exe -ssh -l <username> -pw <password> <IP> "column Results.txt"

使用带有 CMD 的 plink 的当前结果

Folder 1
folder 2
folder 3
folder 4
folder 5
folder 6

希望使用带有 CMD 的 plink 获得此结果

folder 1    folder 2    folder 3
folder 4    folder 5    folder 6
folder 7    folder 8    folder 9

解决方法

当您在没有终端的会话中使用命令时,它们往往会以机器可读的确定性格式生成输出。

对于 ls,这意味着每行一个文件,没有着色等。

当您从命令行使用 plink(或 OpenSSH ssh)执行命令时,它不会为会话分配伪终端。因此,ls(和其他命令)的行为与您体验的一样。

如果您希望命令像在终端中一样运行,请在其命令行中添加 -t switch 以强制使用伪终端。

plink.exe -t -ssh -l <username> -pw <password> <IP> "ls /Users/Dir/"

尽管如果您的目标是解析输出,请不要这样做,因为格式可能会随着环境的变化而改变,并且您的代码会中断。您还可以获得许多其他副作用,例如 ANSI 转义码、分页等。您最好坚持使用默认格式。


关于使用 Plink 执行命令的更多通用问题:
Script via Plink in .bat behaves differently

,

通过使用 winGnu 中的“pr”找到了解决此问题的方法。切换 plink 命令将结果输出到 PC 上的文件和 pr 将其列在 cmd 中。

mode con:cols=180 lines=100
echo. > Results.txt
plink.exe -t -ssh -l <username> -pw <pass> <IP> "ls /Users/Dir/" > Results.txt
pr -3 -t -w180 Results.txt
del Results.txt