问题描述
在 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