免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: shaoping0330
打印 上一主题 下一主题

I/O重定向 详解及例子!  关闭 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2005-01-18 13:02 |只看该作者

I/O重定向 详解及例子!

呵呵,不好意思。
刚刚在吃饭的时候,才想起忘记说 “cmd >a 2>a ” 会互相覆盖了。

论坛徽章:
0
12 [报告]
发表于 2005-01-18 18:13 |只看该作者

I/O重定向 详解及例子!

[qupte]*** 如果stdout和stderr全部都关闭了,又没有保存原来的FD,可以用:exec 1>/dev/tty 恢复。[/quote]
Solaris 8下测试不能用此法恢复,请教该怎么恢复?

论坛徽章:
0
13 [报告]
发表于 2005-01-18 20:19 |只看该作者

I/O重定向 详解及例子!

在 solaris 9 的bash和ksh下通过,在其tcsh下好像不一样,没有通过。
我不熟悉tcsh的缘故~~

solaris8 没环境,无法测试!

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
14 [报告]
发表于 2005-01-18 21:52 |只看该作者

I/O重定向 详解及例子!

原帖由 "一梦如是" 发表:

Solaris 8下测试不能用此法恢复,请教该怎么恢复?

没有环境,请梦人自测,不知是否有tty命令?
  1. exec 1>`tty`
复制代码

论坛徽章:
0
15 [报告]
发表于 2005-01-18 23:28 |只看该作者

I/O重定向 详解及例子!

[quote]原帖由 "shaoping0330"]已经加了。还请 lightspeed 兄.....![/quote 发表:


1.  stdin 定向到文件后,  可以不退出吗?

2.  stderr 定向到文件或关闭后, 多运行不同的程序(如 vi 等) 看看有没有问题.

新问题:

3. 怎样知道当前系统所有重定向的信息?

论坛徽章:
0
16 [报告]
发表于 2005-01-19 10:06 |只看该作者

I/O重定向 详解及例子!

看了这么多,现在总结发言啦:
把FD比作10个篮子,把输出和输入种类比作几个苹果(如输出到文件,输出到monitor,输入自文件,输入自monitor,这些都各算一个苹果),你可以随意把苹果往10个篮子里放,颠来倒去,倒来颠去,就像shaoping0330(逻辑能力超强    )那样,但是一定要记住哪个篮子里放了什么苹果!
在玩放苹果游戏的时候,要遵循一些规则,比如,pipe这个咚咚,好像可以等于FD1(没深究过

论坛徽章:
0
17 [报告]
发表于 2005-01-19 16:06 |只看该作者

I/O重定向 详解及例子!

一、本来在测试 光速兄 的问题,结果出现一些新情况,一并贴上来。
文件名为 “-”。第一次是不小心建立的!
建立此文件至少可以使用:touch - 或 exec 1>-
删除此文件:rm -- -



二、往此文件写内容(有许多方法,如:echo date >- ,但这里只指使用exec ………………):
1、利用stdout将内容定向到文件
$ exec 1>-
$ echo "date"
$ echo "ls"
$ echo "date"
$ echo "date"
此时,也可以使用重定向功能将输出内容送往其他文件,如:echo "other" > other.txt

2、借用一个FD将stdout定向到文件
exec 4>&1 1>-
#
在命令提示符上命令的stdout均会送往文件“-”
#
exec 1>&4 4>&-

3、将命令提示符上的输入送往文件
exec 2>-
# 此时,只有命令的stdout输出
#
exec 2>&1

3、上面的方法都不能直接将内容(要么包含PS,要么要借助stdout)写入文件“-”,不利用script,不知还有没有其他方法?

4、希望写文件的同时,stdout 同时输出到monitor上面来
如果不借助临时文件或tee命令,好像无法做到。因为FD的输出(stdout和stderr)不能直接复制成两份。不知这个原因对否?


三、希望显示此文件内容,至少有两种方案(more、cat这种命令无法显示“-”这种文件,谁知道哪些命令可以):
1、利用标准的输入重定向和输出重定向
exec 1>test 2>&1        # 最好不要 2>&1 ,因为此后会屏蔽一切输入命令的显示(非屏蔽命令的执行)
                        # 如果没有 2>&1 ,提示符和输入仍然会显示,只是命令执行结果(stdout)会送往 test 文件
exec 0<-                # 将会将文件内容显示在提示符之后,但最后会退出
                        # test 文件将会保留 - 文件中的命令执行结果(stdout)
                        # 如果没有 2>&1 ,错误信息(stderr)仍然会送到屏幕
然后到test文件去查看内容,但是有许多内容并不是我们要看的。下面介绍另一种方法:

2、利用强大的read命令,仅显示文件“-”的内容
exec 4<-;while read -u 4;do echo $REPLY ;done;exec 4<&-

3、感觉前面两种方法都不方便,不知谁有更好的方法


四、在交互式shell中如果想不退出,有五种可能的方案:
1、使文件结束符不为:CTRL+D
stty eof "string"
如:stty eof ^P                               
exec 0<file1                                # 还是退出了交互shell

2、使shell不把CTRL+D 作为退出命令
set -o ignoreeof                       
exec 0<file1                                # 还是退出了交互shell

3、利用trap使shell忽略中断信号
                                        # 测试没有通过

4、将其放入subshell中运行
放在一对小括号中运行                        # 什么结果都没有了

5、设置shell的shopt(disown)                        # 不会


五、如何知道系统所有重定向的信息?

只知道可以使用:
$ read -u n   (n是 0~9)
# input
$ echo $REPLY
判断这个FD是否已经建立。

另外,也可以到/dev/fd下面查看哪些FD是建立的。

但是不知到如何得到更详尽的信息了!?


另外,补充一点:
[n]<>word                                在FDn 上,以读写的方式打开文件word,如果没有指定 n,则默认为 0。如果不存在文件word,则自动创建。

[n]<&digit-        将文件描述符 digit 移动到文件描述符 n 上,如果没有指定 n ,则默认为0。
[n]>&digit-        将文件描述符 digit 移动到文件描述符 n 上,如果没有指定 n ,则默认为1。
(可用将上面两个移动的看作是:复制 + 关闭 的组合)

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
18 [报告]
发表于 2005-01-19 22:03 |只看该作者

I/O重定向 详解及例子!

  1. cat ./-
  2. more ./-
复制代码

论坛徽章:
0
19 [报告]
发表于 2005-01-23 13:42 |只看该作者

I/O重定向 详解及例子!

对我来说太难了,一点都看不懂。 请教一下,如何把错误即输出到屏幕,有输出到文件 〔但普通输出不要输出到文件〕?

论坛徽章:
0
20 [报告]
发表于 2005-01-23 16:27 |只看该作者

I/O重定向 详解及例子!

对我来说太难了,一点都看不懂。 请教一下,如何把错误即输出到屏幕,有输出到文件 〔但普通输出不要输出到文件〕?

exec 4>&1
cmd1 2>&1 1>&4|tee -a ufile
exec 4>&-
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP