为了账号安全,请及时绑定邮箱和手机立即绑定

定时任务--java版本号输出次数

在定时任务中有两个任务

* * * * * 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版本号不应该被输出两次吗?为什么演示的文件里面只有一次

正在回答

2 回答

感谢这位同学关注老师的这门课程

这里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 回复 有任何疑惑可以回复我~
#1

程序小工 提问者

谢谢老师的回答,帮助我理解了2>的用法。不过我想问的问题,不是那个2的问题,而是两个定时任务的问题 * * * * * source /etc/profile;sh /root/test.sh * * * * * source /root/.bash_profile;sh /root/test.sh 这两个定时任务都执行/root/test.sh脚本的话,test.sh不是被执行了两次吗?
2018-07-04 回复 有任何疑惑可以回复我~
#2

一路向北

感谢这位同学 这里边的确执行了两次shell脚本,我们视频里是为了演示不同的引入环境变量的方式
2018-07-09 回复 有任何疑惑可以回复我~
#3

champ

怎么感觉老师一直get不到问题点呢?他是想问,既然执行了2次,输出里面应该有2条版本信息,而视频里面只有一次,是因为覆盖的原因,还是其他原因?
2018-09-21 回复 有任何疑惑可以回复我~
#4

一路向北 回复 champ

感谢这位同学的关注,这里因为是重定向写入,第二次会将第一次所重定向的的文件覆盖
2018-09-21 回复 有任何疑惑可以回复我~
查看1条回复

是这样的,老师这边的重定向使用的是"2>",而不是"2>>"。

单单使用">"的话,会发生覆盖;使用">>"是追加(append);

所以老师这边虽然定时任务执行了这个脚本两次,但是输出内容发生了覆盖,所以只输出了一次。简单起见,可以不使用定时任务,直接执行这个脚本两次,并使用不同的输出定向符,看看效果。

另外,老师的解答里边使用 > 和 >2的小窍门真的是很受用^-^

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

定时任务--java版本号输出次数

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信