plink.exe - 设置终端中的行数?
plink.exe - setting number of rows in terminal?
我正在尝试使用 plink 从交换机中提取信息。问题是它一直试图插入一个我似乎无法关闭的 "press space to continue" 中断。我知道这个中断是根据终端中的行数插入的;手动腻子会话会根据 window 高度更改滚动的行数。如何更改 plink 的行为,以便为我 运行 完成的查询提供足够的行,而不想插入中断?
要自动执行命令,您首先应该 运行 没有终端仿真的 SSH 客户端。这样,您就不必处理这样的问题了。
当您在 Plink 的命令行上指定命令时,Plink(类似于 OpenSSH ssh
客户端)不使用终端仿真:
plink username@host less file.txt
这样,less
命令(和类似命令)的行为就像简单的 cat
,因为没有终端。
一些不起眼的 SSH 服务器,例如某些交换机上的 运行ning,不支持 Plink 用于执行其命令行指定命令的 SSH "exec" 通道。
如果是这种情况,您可能正在使用输入重定向将命令传递给 Plink,例如:
echo less file.txt | plink username@host
在这种情况下,Plink 使用终端仿真。所以 less
将对输出进行分页。
要阻止 Plink 使用终端仿真,请使用 -T
switch:
echo less file.txt | plink username@host -T
我发现的最佳解决方案是发送命令以从文本文件中链接出来,如下所示:
plink username@host -pw password < commands.txt
我遇到的最后一个问题是,这样做会导致它输出一个正常的会话,包括在我精心设计的查询结果中添加很多行的启动消息。在我的情况下,这相对容易解决,因为我想要的数据行以整数开头,而其他行都以混合字符开头,所以我可以构建一个简单的 "if %A equ +%A" 检查来清除无用的信息。
对于那些感兴趣的人,这是我的单行命令的样子:
for /f "tokens=1,2,3,7" %A in ('plink user@host -pw pass ^< commands.txt') do @if %A equ +%A for /f "tokens=2 %E in ('plink user@host -pw pass "command using %C from first command"') do @if not %D == %E @echo %B %C %D %E >> outputfile.txt
它拉出一个列表并如上所述进行过滤,然后使用列表的每一行 运行 第二个命令来比较特定的信息位。如果发现不匹配,相关信息将被丢弃在输出文件中。
现在,如果我能弄清楚如何构建我可以使用内联的变量提示。 Windows 10 以不同的方式处理这些内容,它们的工作方式与以前的版本不同。
(是的,这在批处理文件中很容易,但是荒谬的安全策略阻止我 运行 宁宁批处理文件,这将使我的工作更容易。所以我构建了这样的怪物。)
我正在尝试使用 plink 从交换机中提取信息。问题是它一直试图插入一个我似乎无法关闭的 "press space to continue" 中断。我知道这个中断是根据终端中的行数插入的;手动腻子会话会根据 window 高度更改滚动的行数。如何更改 plink 的行为,以便为我 运行 完成的查询提供足够的行,而不想插入中断?
要自动执行命令,您首先应该 运行 没有终端仿真的 SSH 客户端。这样,您就不必处理这样的问题了。
当您在 Plink 的命令行上指定命令时,Plink(类似于 OpenSSH ssh
客户端)不使用终端仿真:
plink username@host less file.txt
这样,less
命令(和类似命令)的行为就像简单的 cat
,因为没有终端。
一些不起眼的 SSH 服务器,例如某些交换机上的 运行ning,不支持 Plink 用于执行其命令行指定命令的 SSH "exec" 通道。
如果是这种情况,您可能正在使用输入重定向将命令传递给 Plink,例如:
echo less file.txt | plink username@host
在这种情况下,Plink 使用终端仿真。所以 less
将对输出进行分页。
要阻止 Plink 使用终端仿真,请使用 -T
switch:
echo less file.txt | plink username@host -T
我发现的最佳解决方案是发送命令以从文本文件中链接出来,如下所示:
plink username@host -pw password < commands.txt
我遇到的最后一个问题是,这样做会导致它输出一个正常的会话,包括在我精心设计的查询结果中添加很多行的启动消息。在我的情况下,这相对容易解决,因为我想要的数据行以整数开头,而其他行都以混合字符开头,所以我可以构建一个简单的 "if %A equ +%A" 检查来清除无用的信息。
对于那些感兴趣的人,这是我的单行命令的样子:
for /f "tokens=1,2,3,7" %A in ('plink user@host -pw pass ^< commands.txt') do @if %A equ +%A for /f "tokens=2 %E in ('plink user@host -pw pass "command using %C from first command"') do @if not %D == %E @echo %B %C %D %E >> outputfile.txt
它拉出一个列表并如上所述进行过滤,然后使用列表的每一行 运行 第二个命令来比较特定的信息位。如果发现不匹配,相关信息将被丢弃在输出文件中。
现在,如果我能弄清楚如何构建我可以使用内联的变量提示。 Windows 10 以不同的方式处理这些内容,它们的工作方式与以前的版本不同。
(是的,这在批处理文件中很容易,但是荒谬的安全策略阻止我 运行 宁宁批处理文件,这将使我的工作更容易。所以我构建了这样的怪物。)