从外壳脚本函数
回答
一个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