bash手册 之重定向原理与实现
Posted zengkefu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bash手册 之重定向原理与实现相关的知识,希望对你有一定的参考价值。
http://www.gnu.org/software/bash/manual/bashref.html#Redirections
http://www.cnblogs.com/weidagang2046/p/io-redirection.html 原理与实现
http://blog.csdn.net/taiyang1987912/article/details/39401265
[root@server1 tmp]# cd /dev/fd
[root@server1 fd]# ll
总用量 0
lrwx------ 1 root root 64 6月 4 12:17 0 -> /dev/pts/0
lrwx------ 1 root root 64 6月 4 12:17 1 -> /dev/pts/0
lrwx------ 1 root root 64 6月 4 12:17 2 -> /dev/pts/0
lrwx------ 1 root root 64 6月 4 12:17 255 -> /dev/pts/0
#使用exec将stdin重定向到文件 #!/bin/bash exec 8<&0 #FD 8是FD 0的副本,用于恢复标准输入 exec < file #将标准输入重定向到file read a #读取file的第一行 read b #读取file的第二行 echo "read has read $$" echo "read has read $PPID" sleep 100 echo "----------------" echo $a #标准输出 echo $b #标准输出
该进程的文件描述符FD 变为如下
[root@server1 fd]# ll
总用量 0
lr-x------ 1 root root 64 6月 4 13:03 0 -> /root/file
lrwx------ 1 root root 64 6月 4 13:03 1 -> /dev/pts/0
lrwx------ 1 root root 64 6月 4 13:03 2 -> /dev/pts/0
lr-x------ 1 root root 64 6月 4 13:03 254 -> /root/a.sh
lrwx------ 1 root root 64 6月 4 13:03 255 -> /dev/pts/0
lrwx------ 1 root root 64 6月 4 13:03 8 -> /dev/pts/0
echo "close FD 8:"
exec 0<&8 8<&- #将FD 8复制到FD 0,恢复FD 0,并关闭FD 8,其他进程可以重复使用FD 8
echo -n "Enter Data:"
read c #read从标准输入读取数据
echo $c
echo $$
echo $PPID
sleep 100
[root@server1 4598]# ll fd
总用量 0
lrwx------ 1 root root 64 6月 4 13:11 0 -> /dev/pts/0
lrwx------ 1 root root 64 6月 4 13:11 1 -> /dev/pts/0
lrwx------ 1 root root 64 6月 4 13:11 2 -> /dev/pts/0
lr-x------ 1 root root 64 6月 4 13:11 254 -> /root/a.sh
lrwx------ 1 root root 64 6月 4 13:11 255 -> /dev/pts/0
#eval重新提交shell #!/bin/bash while read NAME VALUE #第一列作为变量名,第二列作为变量值 //对应文件中的两列 do eval "${NAME}=${VALUE}" #第1轮变量替换,eval重新提交shell完成赋值操作 done < evalsource #输入重定向 echo "var1=$var1" #变量赋值 echo "var2=$var2"
eval "${NAME}=${VALUE}" 为一段可执行的命令,而不是字符串
[root@server1 ~]# eval "cc=100"
[root@server1 ~]# echo $cc
100
[root@server1 ~]# echo "dd=100"
dd=100
[root@server1 ~]# x=100 [root@server1 ~]# ptrx=x [root@server1 ~]# eval echo \\$$ptrx 100 [root@server1 ~]# eval $ptrx=50 [root@server1 ~]# echo $x 50 [root@server1 ~]# echo $ptrx x
以上是关于bash手册 之重定向原理与实现的主要内容,如果未能解决你的问题,请参考以下文章