有点shell重定向
这里是如何,我们通常做shell重定向
$ ./pgm.sh args >out.txt 2>err.txt
我想稍作修改并运行如下
$ ./pgm.sh args
的要求,输出和错误,应该去一些内pgm.sh计算上ARGS名。 一个典型案例,可能是当日期是ARGS部分。 所以,你想输出到去说/ /目录/ pgm_out_YYYYMMDD.txt 1,
N>file.txt ,即与标准的重定向方式的问题,关联到File.txt文件描述符N是,它仅适用于新的分叉过程,而不是当前进程。
所以
$ echo hi 1>out.txt ; echo hii 。将发送您好out.txt但将打印HII到stdout 2 $ echo hi 1>out.txt ; echo hii
这是其中exec来拯救我们的。 如果我们加上exec 1>somefile.txt然后输出从脚本的其余部分将去somefile.txt
$。/ test.sh将重定向嗨以及作为HII out.txt
$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
同样重定向标准输出以及标准错误,我们会做这样的事情
cat test2.sh
exec 1>out.txt
exec 2>err.txt
echo out text
echo 1>&2 err text
somenoneexitent command
ls -ld /tmp
现在回来重定向从外壳内的一些文件的原始点,让我们说方案计算中的一些变量OUTFILE文件名 ,我们可以有刚刚完成exec 1>$OUTFILE
能够解决当前的问题。 但你可能想通过下面的示例实现“随机存取”shell脚本文件。 从这里的例子是
echo 1234567890 > File # Write string to "File".
exec 3<> File # Open "File" and assign fd 3 to it.
read -n 4 <&3 # Read only 4 characters.
echo -n . >&3 # Write a decimal point there.
exec 3>&- # Close fd 3.
cat File # ==> 1234.67890
与评论,这个代码是自明的。
-
1,它也可以通过$ ./pgm.sh args >pgm_out`date +%Y%m%d`但想法是生成此文件基础上的一些程序本身的逻辑名称。
2 1 1> out.txt是多余的,但它在这里澄清,我们重定向FD 1



































