2015-09-17 25 views
0

我使用/ bin/sh的编写经由NCAT从一个telnet呼叫获取数据,像这样一个外壳脚本时重叠:返回线在一个外壳脚本中使用NCAT管

echo 'transport info' | ncat hostname 9993

当我在命令行输出看起来像这样做:

500 connection info: 
protocol version: 1.3 
model: HyperDeck Studio 

208 transport info: 
status: record 
speed: 0 
slot id: 1 
clip id: none 
display timecode: 00:28:01:27 
timecode: 00:00:00:00 
video format: 1080i5994 
loop: false 

但是,当我在一个shell脚本/bin/sh做它看起来像这样:

loop: falseat: 1080i599443:15 

这里是我的示例脚本:

#!/bin/sh 
FOO="$(echo "transport info" | ncat -C hostname 9993)" 
echo $FOO 

任何人都知道为什么会这样?

+1

尝试'回声 “TR在” | ncat -C hyperl1 9993 | dos2unix'。但是,不确定'dos2unix'可以从stdin/out读/写,任何人都可以方便地使用手册页(我现在不是)。另请注意,将变量设置为多行输出是一个高级主题。你可以浪费很多时间来做正确的事情。在你完成所有其他工作之前,使用tmp文件,然后努力解决问题,保存到变量中。祝你好运。 – shellter

+0

我没有'dos2unix'。我试图写入临时文件,然后回读,结果相同:在命令行上工作,在脚本中不起作用。我也尝试过使用sed来替换\ r,\ r \ n等等。注意,我使用的是一个非常类似于BSD的mac。 – Dave

+0

进度:我使用自制软件安装了'dos2unix'('brew install dos2unix'),现在我有了这个命令。现在,当我使用命令行并将管道添加到'dos2unix'时,我得到相同的输出。但是,当我把它放在脚本中时,我将它全部放在一行上:'500连接信息:协议版本:1.3型号:HyperDeck Studio 208传输信息:状态:预览速度:0插槽ID:无剪辑ID:无显示时间码:01:10:01:01时间码00:00:00:00视频格式:1080i5994 loop:false。我可以将它分解到不同的行以使用grep吗? – Dave

回答

1
#!/bin/sh 
echo "transport info" | ncat -C hostname 9993 | dos2unix > /tmp/test.txt 
cat /tmp/test.txt 

输出:

500 connection info: 
protocol version: 1.3 
model: HyperDeck Studio 

208 transport info: 
status: preview 
speed: 0 
slot id: none 
clip id: none 
display timecode: 01:10:01:01 
timecode: 00:00:00:00 
video format: 1080i5994 
loop: false