这个小脚本应该怎样理解?

cnhkzyy 2017-07-07 01:37:58

如上图:
这个脚本运行之后的结果是:
[root@localhost sh]# ./pipe.sh
STDIN
PIPE
看不懂这个脚本是什么意思?
...全文
99 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnhkzyy 2017-07-08
  • 打赏
  • 举报
回复
引用 2 楼 ipqtjmqj 的回复:

function show_input_type()
{
	if test -p /dev/fd/0
	then
		echo PIPE
	else
		echo STDIN
	fi
}
show_input_type这个函数写明白一点如上所示,作用就是检测0号fd的类型,如果是管道,则输出PIPE, 否则输出STDIN 默认情况下0号就是stdin, 1号是stdout, 2号是stderr。 所以show_input_type "input"这句输出STDIN, 其中"input"是函数的参数,不是必须的,因为show_input_type函数根本就没有使用参数。
谢谢指点,我大体是明白了。这里应该是对标准输入的参数传入形式做一个判断,如果是直接输入的,那么echo STDIN,如果是通过管道的形式传入的参数,那么打印echo PIPE。我的Centos下的文件描述符不是/dev/fd/0,而是/pro/self/fd/0应该是版本问题吧,我觉得/dev/fd/0还可以换成/dev/stdin(它是前者的链接文件)
ipqtjmqj 2017-07-08
  • 打赏
  • 举报
回复
引用 3 楼 cnhkzyy 的回复:
[quote=引用 2 楼 ipqtjmqj 的回复:]

function show_input_type()
{
	if test -p /dev/fd/0
	then
		echo PIPE
	else
		echo STDIN
	fi
}
show_input_type这个函数写明白一点如上所示,作用就是检测0号fd的类型,如果是管道,则输出PIPE, 否则输出STDIN 默认情况下0号就是stdin, 1号是stdout, 2号是stderr。 所以show_input_type "input"这句输出STDIN, 其中"input"是函数的参数,不是必须的,因为show_input_type函数根本就没有使用参数。
谢谢指点,我大体是明白了。这里应该是对标准输入的参数传入形式做一个判断,如果是直接输入的,那么echo STDIN,如果是通过管道的形式传入的参数,那么打印echo PIPE。我的Centos下的文件描述符不是/dev/fd/0,而是/pro/self/fd/0应该是版本问题吧,我觉得/dev/fd/0还可以换成/dev/stdin(它是前者的链接文件)[/quote] 我不清楚,你可以试试
ipqtjmqj 2017-07-07
  • 打赏
  • 举报
回复

function show_input_type()
{
	if test -p /dev/fd/0
	then
		echo PIPE
	else
		echo STDIN
	fi
}
show_input_type这个函数写明白一点如上所示,作用就是检测0号fd的类型,如果是管道,则输出PIPE, 否则输出STDIN 默认情况下0号就是stdin, 1号是stdout, 2号是stderr。 所以show_input_type "input"这句输出STDIN, 其中"input"是函数的参数,不是必须的,因为show_input_type函数根本就没有使用参数。
zhxianbin 2017-07-07
  • 打赏
  • 举报
回复
就相当于 c 里的 if() else

427

社区成员

发帖
与我相关
我的任务
社区描述
非技术问题的乐园
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧