定時任務--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版本號不應該被輸出兩次嗎?為什么演示的文件里面只有一次
在定時任務中有兩個任務
*?*?*?*?*?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版本號不應該被輸出兩次嗎?為什么演示的文件里面只有一次
2018-07-04
舉報
2018-07-04
感謝這位同學關注老師的這門課程
這里
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>去做一個錯誤重定向輸出.
不知道老師這么回答你是否能夠理解?
2018-10-17
是這樣的,老師這邊的重定向使用的是"2>",而不是"2>>"。
單單使用">"的話,會發生覆蓋;使用">>"是追加(append);
所以老師這邊雖然定時任務執行了這個腳本兩次,但是輸出內容發生了覆蓋,所以只輸出了一次。簡單起見,可以不使用定時任務,直接執行這個腳本兩次,并使用不同的輸出定向符,看看效果。
另外,老師的解答里邊使用 > 和 >2的小竅門真的是很受用^-^