叫我有一個命令我會運行到生成隨機字符串:管道頭在水管壞了導致shell腳本從蟒蛇
var=`< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c8`
當我在交互bash命令這個命令我得到絕對沒有錯誤。但是當我把這個命令放到腳本中,並將其作爲腳本運行時,我得到由tr指示的Broken pipe錯誤。我已經閱讀了幾個相關的主題,但仍然沒有答案,爲什麼腳本和交互行爲是不同的,有沒有辦法用shell選項或其他的控制它?
編輯我:
在問候給我發現表明破裂的管道失誤可以通過控制註釋:
trap - SIGPIPE # to ignore errors
和
trap "" SIGPIPE # to display errors
編輯II:
好吧,我提供了關於繁殖條件的錯誤信息。最後,它似乎)引起的與Python包裝,與使用os.system(稱爲腳本問題:給定
python -c "import os; os.system('sh -c \"< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c8\"')"
線獨立使用OS的產生破裂的管道失誤。
編輯III:
這個主題已經在這裏討論: https://mail.python.org/pipermail/python-dev/2005-September/056341.html
聽起來像所討論的問題[這裏](https://github.com/koalaman/shellcheck/issues/494)和在參考的問題。 (shellcheck沒有涉及到,它只是恰好討論了這個確切的問題,並討論了關於使用shellcheck,這是一個很棒的工具,警告這類事情。) –
在Cygwin/bash-4.1.10下完美工作(4)...(在腳本中設置你的行加一個'echo $ var',除'#!/ bin/sh'之外別無他法。) – Amessihel
你是否在腳本中捕獲SIGPIPE? – PSkocik