PHPSeclib使用写操作的附加换行符

PHPSeclib使用写操作的附加换行符,php,phpseclib,Php,Phpseclib,对于通过SSH编辑文件的特定用例,我即将简单地将其移回PERL。似乎无论我做什么,都会在文件中放置额外的换行符。示例变量具有以下特性: req_extensions = v3_req prompt = no [req_distinguished_name] C = US 使用下面的命令,我得到下面的输出 $ssh->write("echo '$file' > /directory/test.txt\n"); 导致: req_extensions = v3_req prompt

对于通过SSH编辑文件的特定用例,我即将简单地将其移回PERL。似乎无论我做什么,都会在文件中放置额外的换行符。示例变量具有以下特性:

req_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
使用下面的命令,我得到下面的输出

$ssh->write("echo '$file' > /directory/test.txt\n");
导致:

req_extensions = v3_req

prompt = no

[req_distinguished_name]

C = US
编辑并添加相关调试日志:

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0022, network: 0s)
00000000  00:00:00:02:00:00:00:01:65                       ........e

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0005, network: 0.0001s)
00000000  00:00:00:02:00:00:00:01:63                       ........c

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0005, network: 0s)
00000000  00:00:00:02:00:00:00:01:68                       ........h

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0003, network: 0s)
00000000  00:00:00:02:00:00:00:01:6f                       ........o

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0005, network: 0.0003s)
00000000  00:00:00:02:00:00:00:01:20                       ........ 

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0004, network: 0s)
00000000  00:00:00:02:00:00:00:01:27                       ........'

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0.0001s)
00000000  00:00:00:02:00:00:00:01:72                       ........r

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000  00:00:00:02:00:00:00:01:65                       ........e

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0003, network: 0.0002s)
00000000  00:00:00:02:00:00:00:01:71                       ........q

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000  00:00:00:02:00:00:00:01:5f                       ........_

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000  00:00:00:02:00:00:00:01:65                       ........e

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0007, network: 0.0006s)
00000000  00:00:00:02:00:00:00:01:78                       ........x

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0003, network: 0s)
00000000  00:00:00:02:00:00:00:01:74                       ........t

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0.0001s)
00000000  00:00:00:02:00:00:00:01:65                       ........e

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0003, network: 0.0002s)
00000000  00:00:00:02:00:00:00:01:6e                       ........n

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0s)
00000000  00:00:00:02:00:00:00:01:73                       ........s

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000  00:00:00:02:00:00:00:01:69                       ........i

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0005, network: 0.0002s)
00000000  00:00:00:02:00:00:00:01:6f                       ........o

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0005, network: 0s)
00000000  00:00:00:02:00:00:00:01:6e                       ........n

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000  00:00:00:02:00:00:00:01:73                       ........s

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000  00:00:00:02:00:00:00:01:20                       ........ 

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0004, network: 0s)
00000000  00:00:00:02:00:00:00:01:3d                       ........=

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000  00:00:00:02:00:00:00:01:20                       ........ 

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0s)
00000000  00:00:00:02:00:00:00:01:76                       ........v

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000  00:00:00:02:00:00:00:01:33                       ........3

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0s)
00000000  00:00:00:02:00:00:00:01:5f                       ........_

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0s)
00000000  00:00:00:02:00:00:00:01:72                       ........r

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000  00:00:00:02:00:00:00:01:65                       ........e

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0.0001s)
00000000  00:00:00:02:00:00:00:01:71                       ........q

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000  00:00:00:02:00:00:00:02:0d:0a                    ..........

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000  00:00:00:02:00:00:00:02:3e:20                    ........> 

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0005, network: 0.0004s)
00000000  00:00:00:02:00:00:00:02:0d:0a                    ..........

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000  00:00:00:02:00:00:00:02:3e:20                    ........> 

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000  00:00:00:02:00:00:00:01:70                       ........p

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000  00:00:00:02:00:00:00:01:72                       ........r

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000  00:00:00:02:00:00:00:01:6f                       ........o

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000  00:00:00:02:00:00:00:01:6d                       ........m

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0.0001s)
00000000  00:00:00:02:00:00:00:01:70                       ........p

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0s)
00000000  00:00:00:02:00:00:00:01:74                       ........t

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000  00:00:00:02:00:00:00:01:20                       ........ 

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0s)
00000000  00:00:00:02:00:00:00:01:3d                       ........=

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000  00:00:00:02:00:00:00:01:20                       ........ 

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0.0002s)
00000000  00:00:00:02:00:00:00:01:6e                       ........n

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000  00:00:00:02:00:00:00:01:6f                       ........o

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0.0002s)
00000000  00:00:00:02:00:00:00:02:0d:0a                    ..........

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000  00:00:00:02:00:00:00:02:3e:20                    ........> 

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000  00:00:00:02:00:00:00:02:0d:0a                    ..........

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000  00:00:00:02:00:00:00:02:3e:20                    ........> 

只要传递
-n
,它就会解决这个问题


$ssh->write(“echo-n'$file'>/directory/test.txt\n”);


-n
告诉不要追加新行。

我不确定
write()
为什么要发送额外的换行符。我确信如果我一行一行地添加到该文件中,就会起作用。最后,我简单地使用了
SFTP::put()
,它允许我将
@
放在
SSH::exec()
无法使用的地方。感谢所有的输入-这是一个与我所希望的略有不同的方法,但它可以工作。

您想删除新行还是想添加新行?我不想添加实际上不在字符串中的额外换行符。我想需要查看该字符串变量的十六进制?可能是CR和LF?您在该命令的末尾添加了
\n
。删除它,它将删除换行符。您的命令可以是
$ssh->write(“echo'$file'>/directory/test.txt”)^对此也感到奇怪。这不会让你得到
test.txtn
?根据
echo
手册页,结果与以前相同<代码>-n
应该可以解决这个问题。虽然它对我有用。请参阅我的要点。我在这里找到了类似问题的解决方案。如果
write
方法有任何问题,您可以使用
exec()
方法。还有,你的远程服务器的操作系统是什么?太棒了。。为什么不使用
put