2017-07-26 56 views
0

考慮以下sh命令:「&>>」 在SH在Ubuntu 16.04.2和Fedora 24的行爲不同

sh -c 'sleep 3 &>> /dev/null' 

&>>應該重定向stdoutstderr。但是,Fedora 24和Ubuntu 16.04.2的解釋不同。

在Fedora 24中,它正好以這種方式工作,並且上面的命令一直等到sleep結束。

在Ubuntu 16.04.2中,該命令的運行方式與sleep 3 & >> /dev/null類似,即sleep發送到後臺,命令立即退出。

由於我在R腳本中調用諸如foo arg1 arg2 output_file &>> test.log之類的東西,並期望命令以output_file結尾,所以這種差異會導致出現問題並且不容易找到。在Fedora 24中,它按預期工作,但令我驚訝的是Ubuntu 16.04.2中的行爲變化。

我不確定這是否是有記錄的行爲。

+2

可能'sh'是Fedora中'bash'的鏈接? 'bash -c'sleep 3&>>/dev/null''在Ubuntu上工作嗎? – Sundeep

+0

如果你正在編寫null流,你不需要'''只需'>'就足夠了,即'sh -c'sleep 3&>/dev/null' ' – Inian

+0

'bash -c'sleep 3&>>/dev/null'在兩側完全相同 –

回答

2

最後一個環節介紹瞭如何解決它的dash(在sh在Ubuntu):

sh -c 'sleep 3 > /dev/null 2>&1' 

這也將猛砸工作。請注意單個> - 您不需要將/ append運算符(>>)與/ dev/null一起使用。

提示:看到這樣的情況,您可能很想將所有腳本編寫爲與sh的兩個實現兼容,但是您只會讓您的生活變得不必要的困難。使用大多數強大的外殼,您可以預期在所有您感興趣的平臺上都可以使用這個外殼。在您的情況下,這將是bash(版本4),這也是許多其他發行版的默認設置。

相關問題