问一些基本的shell命令

wyjq395 2011-06-30 11:21:06
filter file2 | cat file1 - file3 | lpr
filter file2 | cat file1 /dev/fd/0 file3 | lpr
首先查了下 | 管道符号
命令1 | 命令2
机制:上一个的命令输出作为下一个命令的输入
想问下那个事上一个命令呢?
按照我的执行来看命令2好像是先执行的,命令2就是上一个命令?

lpr命令这样使用不对吗,执行的结果提示没有目标(no default destination available),man lpr看确实需要有个参数。
但这条命令我是从UNIX环境高级编程中看来的

-符号是啥意思呢?

我建立上个文件file1,file2和file3,文件的内容分别是file1,file2和file3(也就是文件名)
我执行filter file2 | cat file1 - file3 或者filter file2 | cat file1 /dev/fd/0 file3
都如下输出
#filter file2 | cat file1 - file3
file1
command not found
file3
这怎么解释呢?
...全文
259 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyjq395 2011-07-01
  • 打赏
  • 举报
回复
ok,理解了
filter file2 | cat file1 - file3 就相当于
cat file1 file2 file3
只是我的系统没有filter命令中间输出是command not found
qq120848369 2011-07-01
  • 打赏
  • 举报
回复
了解一下popen函数或者了解一下父子进程管道通信,你会有所觉悟.
昵称很不好取 2011-06-30
  • 打赏
  • 举报
回复
命令1 | 命令2
--------------
管道,这里表示命令1的结果作为命令2 的输入
沭水河畔 2011-06-30
  • 打赏
  • 举报
回复
楼主可以将其简化为“cat -”是什么。
cat a.txt是输出a.txt的内容,那么cat -就是输出标准输入的内容。
Ctrl + D发送EOF或者敲回车看效果。
lpr的命令没用过,不过可以试试xargs:
filter file2 | cat file1 /dev/fd/0 file3 | xargs lpr
xargs简单的说就是这样:
ls a.txt | xargs file等效于file a.txt。即把标准输入的内容作为参数。
wyjq395 2011-06-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 justkk 的回复:]
filter file2 | cat file1 - file3

这儿的-表示标准输入
现在管道机制的作用把filter file2的输出作为cat的标准输入了
[/Quote]
谢谢,-确实表示标准输入,理解了。

不过还有个问题
#fff | cat file1 - file3 (这边fff是我随便打的,因为我的系统也没有filter命令)
file1
command not found
file3
而执行
#cat file1 - file3
file1
//然后在这边等待输入。
这怎么解释呢?
真不知道 file1 - file3是什么意思?
wyjq395 2011-06-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 binjly 的回复:]
程序执行都是从左至右的,左边的是第一个,右边的其次,依次下去。
“怎么第一个命令没有输出?”因为第一个命令输出的结果,直接传给管道右边的第二个命令去了。并做为了第二个命令所需要的输入。
用比较常用的两个命令来示范一下,这样你会比较容易理解吧:

Assembly code

echo abcdefg | less<回车>

试一下你就知道了
[/Quote]
谢谢你的回答,更进一步了理解了。
justkk 2011-06-30
  • 打赏
  • 举报
回复
filter file2 | cat file1 - file3

这儿的-表示标准输入
现在管道机制的作用把filter file2的输出作为cat的标准输入了
Vilien 2011-06-30
  • 打赏
  • 举报
回复
程序执行都是从左至右的,左边的是第一个,右边的其次,依次下去。
“怎么第一个命令没有输出?”因为第一个命令输出的结果,直接传给管道右边的第二个命令去了。并做为了第二个命令所需要的输入。
用比较常用的两个命令来示范一下,这样你会比较容易理解吧:
echo abcdefg | less<回车>

试一下你就知道了
wyjq395 2011-06-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 thefirstz 的回复:]
命令1 | 命令2
--------------
管道,这里表示命令1的结果作为命令2 的输入
[/Quote]
那个filter是怎么用的呢,怎么第一个命令没有输出?
书上这样解释:
First, cat reads file1, next its standard input (the output of the filter program on file2), then file3

23,223

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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