有點shell重定向

2009年5月10日, prashant · 評論
提起下: 技術

這裡是如何,我們通常做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

$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
$。/ test.sh將重定向嗨以及作為HII out.txt

同樣重定向標準輸出以及標準錯誤,我們會做這樣的事情
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