如何解决dd命令输出结果无法重定向到文件的问题

发布时间:2020-06-16编辑:脚本学堂
如何解决dd命令输出结果无法重定向到文件的问题,感兴趣的朋友可以参考下。

如何解决dd命令输出结果无法重定向到文件的问题,感兴趣的朋友可以参考下。

先以time为例:
解决time命令输出信息的重定向问题
 
time命令的输出信息是打印在标准错误输出上的, 我们通过一个简单的尝试来验证一下。

复制代码 代码如下:
[root@web186 root]# time find . -name "mysql.sh" >1.txt
real    0m0.081s
user    0m0.060s
sys     0m0.020s
[root@web186 root]# time find . -name "mysql.sh" 2>2.txt
./work186/sms/bin/mysql.sh
./work186/sms/src/scripts/mysql.sh
./work186/sms/src/scripts1/mysql.sh
real    0m0.068s
user    0m0.040s
sys     0m0.030s

通过上面的尝试,发现无法将time的输出信息重定向到文件里面,为什么?因为time是shell的关键字,shell做了特殊处理,它会把time命令后面的命令行作为一个整体来进行处理,在重定向时,实际上是针对后 面的命令来的,time命令本身的输出并不会被重定向的。那现在怎么办呢?网上提供了两种解决方法【2,3】,我们一一尝试一下。
 
第一种解决方法,就是将time命令和将要执行的命令行放到一个shell代码块中,也就是一对大括号中,要注意空格和分号的使用。
[root@web186 root]# {time find . -name "mysql.sh"} 2>2.txt
 
好像成功了。慢,看一下对不对。
[root@web186 root]# cat 2.txt
-bash: {time: command not found
 
原来bash把 {time 作为一个整体来处理了,前后都加上空格试试。
[root@web186 root]# { time find . -name "mysql.sh" } 2>2.txt
> Ctrl+C

 
这次Bash认为命令都没有输入完成,少了分号。因为Bash认为后面的 } 是linuxjishu/14008.html target=_blank class=infotextkey>find命令的参数。

复制代码 代码如下:
[root@web186 root]# { time find . -name "mysql.sh"; } 2>2.txt
./work186/sms/bin/mysql.sh
./work186/sms/src/scripts/mysql.sh
./work186/sms/src/scripts1/mysql.sh
./work186/sms1/bin/mysql.sh
./work186/sms1/src/scripts/mysql.sh
./temp/sms/bin/mysql.sh
./temp/sms/src/scripts/mysql.sh
[root@web186 root]# cat 2.txt
real    0m0.068s
user    0m0.030s
sys     0m0.040s

第一种方式的尝试成功了,总结起来就是 { time command-line; } 2>file  注意分隔符的使用。
 
另外一种方式就是使用子Shell的方式,如下所示:

复制代码 代码如下:
[root@web186 root]# (time find . -name "mysql.sh") 2>2.txt
./work186/sms/bin/mysql.sh
./work186/sms/src/scripts/mysql.sh
./work186/sms/src/scripts1/mysql.sh
./work186/sms1/bin/mysql.sh
./work186/sms1/src/scripts/mysql.sh
./temp/sms/bin/mysql.sh
./temp/sms/src/scripts/mysql.sh
[root@web186 root]# cat 2.txt
real    0m0.083s
user    0m0.040s
sys     0m0.020s
 

第二种方式的尝试也成功了,总结起来就是 (time command-line) 2>file 这里time紧贴着小括号(也可以的,命令行结束也不必带分号。当然最好还是用第一种方式,毕竟启动一个子shell是要多占些资源的。
 
针对dd命令。同time命令,dd命令包括了time命令。
dd if=/dev/zero of=/mnt/test bs=1k count=100 >>output.txt

此时并不能把dd命令显示的时间和速度保存到output.txt里。因为dd命令的输出是到标准错误输出上的。
必须采用dd if=/dev/zero of=/mnt/test bs=1k count=100  2>>output.txt 才可以。

您可能感兴趣的文章:
Linux下dd命令生成指定大小的虚拟块设备文件
linux下dd命令备份磁盘的节点(主引导记录)恢复数据
linux中dd命令的用法详解
linux中dd命令使用详解
使用dd命令克隆磁盘的方法介绍
linux中dd命令详解(清除硬盘数据)
dd命令中seek和skip的用法
如何查看dd命令的拷贝进度