Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Can';使用ssh、nohup&;网猫_Linux_Bash_Ssh_Netcat_Nohup - Fatal编程技术网

Linux Can';使用ssh、nohup&;网猫

Linux Can';使用ssh、nohup&;网猫,linux,bash,ssh,netcat,nohup,Linux,Bash,Ssh,Netcat,Nohup,试图解决一个恼人的问题,如果我能找到正确的序列正确地逃逸,这个问题肯定是可以解决的 场景:我有一个与zfs send/recv一起使用的脚本,为了在本地网络中获得最佳性能,我希望该脚本连接到接收机器,生成一个netcat侦听器管道到zfs recv,然后我将从源脚本发送到它 我构造的命令类似于: rcmd="nohup nc -l -p $NCPORT|zfs recv $destfs > /dev/null 2>&1" 并通过以下方式启动: ssh -f $RHOST "

试图解决一个恼人的问题,如果我能找到正确的序列正确地逃逸,这个问题肯定是可以解决的

场景:我有一个与zfs send/recv一起使用的脚本,为了在本地网络中获得最佳性能,我希望该脚本连接到接收机器,生成一个netcat侦听器管道到zfs recv,然后我将从源脚本发送到它

我构造的命令类似于:

rcmd="nohup nc -l -p $NCPORT|zfs recv $destfs > /dev/null 2>&1"
并通过以下方式启动:

ssh -f $RHOST "${rcmd}"
然后使用以下命令启动发送流:

zfs send $locallastsnap | nc $RHOST $NCPORT
在接收端,我看到它产生了两个进程

bash -c nohup nc -l -p 12739|zfs recv backup/data
nc -l -p 12739

因此,在线路的某个地方,globbing正在丢失与recv命令和nohup stdout/err重定向的管道连接

我想您的管道可能有问题。您可以在远程计算机上看到此命令:

bash -c nohup nc -l -p 12739|zfs recv backup/data
但你想让它说:

bash -c "nohup nc -l -p 12739|zfs recv backup/data"
否则,我认为您的管道将等待bash退出并将输出管道化到zfs

所以,你可以自己尝试添加这些引语:

rcmd="\"nohup nc -l -p $NCPORT|zfs recv $destfs > /dev/null 2>&1\""

我认为您不应该在
ps
/等输出中看到重定向。它们不是正在运行的命令的一部分,它们是它的shell调用的一部分。好吧,这就解释了缺少2>&1的原因,但我仍然停留在其余部分。我尝试了无数种不同的转义机制,但都没有成功。我看不出发布的代码有任何明显的错误。重定向应该出现在bash的
ps
行中,因为它们是作为参数传递给bash的带引号字符串的一部分。ps可能正在截断其输出中的命令行。考虑对BASH进程的PID检查“代码> /PRO//CMDLIN < /代码>,查看实际传递给BASH的内容。关于缺少<代码> ZFS 命令,尝试在不重定向的情况下运行SSH命令,这样您就可以从命令中看到任何错误。Bash可能无法启动zfs,或者zfs可能正在打印错误消息并提前退出。我让脚本打印所有命令,这样我就可以继续执行,如果我手动启动它们,一切都会正常工作。唉。由于没有ZFS recv进程监听,我在发送端得到了一个断开的管道,然后清理代码终止了nc进程,但在接收端没有早期错误,重定向被关闭。我不这么认为。如果
-c
没有看到整个字符串,您就不会在流程列表中看到所有字符串(您只会看到管道前面的部分)。不幸的是,它看起来令人困惑,但这是删除引用位置的副作用。