從外殼腳本函數
回答
一個shell函數可以返回一個數值。考慮0和1,而不是「f」和「T」
#!/bin/sh
a() {
R=0
ls -1 a*
[ "$?" == "1" ] && { R=1; }
return $R
}
a
r=$?
echo $r
這仍然會寫從中你可能仍然要處理的ls -1 a*
輸出,但r
值將是0或1億韓元不包括輸出。
重定向輸出的其他例子可以是一行或一整塊,如其他人所建議的,您應該瞭解其他方式來測試條件(但我假設ls
是一種任意例如)
爲什麼不用'$ R'跳過整個時髦的業務,然後運行'ls'然後'返回$?'? – Caleb 2013-07-31 08:44:18
@Caleb - 這個答案是對PeterMmm原始腳本的修改,以演示shell函數如何返回值。我相信整個樣本函數可以被忽略,但我不知道他在真實代碼中可能會做什麼。 – 2013-07-31 23:54:46
a() {
ls -1 a* > /dev/null
[ "$?" == "0" ] && echo t || echo f
}
r=`a`
echo $r
考慮使用[-f文件名]和其他文件測試。
您不必使用ls
來檢查從a
開始的文件。只需使用shell
a() {
shopt -s nullglob
ret="f"
for file in a*
do
ret="t"
break
done
echo "$ret"
}
這是一個例子,不是我的問題。如何避免寫入無處不在「>/dev/null 2>/dev/null」當我想從腳本函數中獲取單個值/字符串時。 – PeterMmm 2010-06-29 12:01:53
你可以把一個重定向命令的列表:
{ command1 command2 } >/dev/null
如果在腳本中的某些時候,你不想從後續命令的任何輸出,你可以重定向外殼的與exec
內置輸出:
echo interesting exec >/dev/null echo boring
注意,這一直持續到腳本的末尾,而不是直到函數結束。這會在有趣的之後處理命令,但不在之前。
有一種方法可以通過使用文件描述符操作來恢復exec /dev/null
的效果。我不一定會推薦它,因爲在實踐中制定出來可能會很棘手。我們的想法是將連接到標準輸出的任何東西重新定位到不同的描述符,然後將標準輸出重定向到不同的文件,最後將原始標準輸出重新定位回標準輸出。
{ exec 3>&1 # duplicate fd 3 to fd 1 (standard output) exec >/dev/null # connect standard output to /dev/null echo boring exec 1>&3 # connect standard output back to what was saved in fd 3 echo interesting exec >/dev/null # connect standard output to /dev/null again echo more boring } 3>/dev/null # The braced list must have its fd 3 connected somewhere, # even though nothing will actually be written to it.
- 1. (?TCL)腳本從外殼
- 2. 從Extendscript Toolkit創建外殼腳本
- 3. 經由外殼腳本
- 4. 帶外殼腳本的RAILS_ROOT
- 5. 簡單的外殼腳本
- 6. 使用外殼腳本
- 7. 外殼腳本解析
- 8. 環路bash外殼腳本
- 9. 分析外殼腳本
- 10. 強制外殼腳本flflush
- 11. 使用外殼腳本
- 12. 外殼腳本隨機數的生成
- 13. 帶外殼腳本的數字產品
- 14. 函數內的變量-linux外殼腳本
- 15. 電源外殼從AD啓動腳本執行腳本
- 16. 的Unix外殼腳本版本
- 17. 從Oracle到UNIX外殼腳本的Wild Card參數
- 18. 外殼腳本文件測試
- 19. 自動ACL檢查外殼腳本
- 20. OS X外殼腳本運行ntpdate
- 21. 跟蹤移動的外殼腳本
- 22. 外殼腳本輸入目錄
- 23. 外殼腳本自動運行PL/SQL
- 24. 外殼腳本生成地圖
- 25. 漂亮的外殼腳本打印
- 26. raspberrypi使用外殼腳本與其他
- 27. 重定向外殼輸出Ruby腳本
- 28. 顯示外殼腳本的進程
- 29. 廚師外殼腳本交互
- 30. 自動化使用外殼腳本
'r = $(a); echo $ r'當然可以用'a'代替。 – 2012-05-19 12:37:24