程序小工
2018-07-04 19:32
在定时任务中有两个任务
* * * * * source /etc/profile;sh /root/test.sh * * * * * source /root/.bash_profile;sh /root/test.sh
并且都是执行/root/test.sh脚本,
# /root/test.sh java -version 2> /root/script.out
这样的话,java版本号不应该被输出两次吗?为什么演示的文件里面只有一次
感谢这位同学关注老师的这门课程
这里java -version 2>
/root/script
.out
这条命令是是将java -version的输出重定向到script.out中
2>代表shell错误重定向输出, 而不是将java版本号输出两次.2并不代表次数,只是一个符号.
相对的1>代表shell标准重定向输出, 等同于我们平时经常用的>
类似的命令可以是 echo "test" > /root/test.out
这里因为java -version的输出不是一个标准输出, 所以我们不能用>或者1>去将其输出重定向到一个文件.
如果这么写将无法输出到指定文件, 所以这里只能用2>去将其作为错误重定向到一个文件.
如何区别使用>和2>
老师这里的秘诀就是一般我们的shell自带的命令例如cat, echo都可以用>去做标准重定向.
第三方的工具, 类似java, php, python我们则需要使用2>去做一个错误重定向输出.
不知道老师这么回答你是否能够理解?
是这样的,老师这边的重定向使用的是"2>",而不是"2>>"。
单单使用">"的话,会发生覆盖;使用">>"是追加(append);
所以老师这边虽然定时任务执行了这个脚本两次,但是输出内容发生了覆盖,所以只输出了一次。简单起见,可以不使用定时任务,直接执行这个脚本两次,并使用不同的输出定向符,看看效果。
另外,老师的解答里边使用 > 和 >2的小窍门真的是很受用^-^
Crontab不知疲倦的时间表
6665 学习 · 13 问题
相似问题
回答 1
回答 2