쉘 리디렉션의 비트
여기에 우리가 일반적으로 쉘 리디렉션을 할 방법입니다
$ ./pgm.sh args >out.txt 2>err.txt
나는 그것을 조금 수정하고 다음과 같이 실행하려고
$ ./pgm.sh args
출력 및 오류 인수에 따라 pgm.sh 안에서 계산된 일부 파일 이름으로 이동해야한다는 요구와 함께. 날짜가 인수의 일부 경우에 한 설명의 경우 수 있습니다. 그래서 당신은 당신의 / 디렉토리 / pgm_out_YYYYMMDD.txt / 인사 이동 STDOUT을 사고 싶은데요 1
리디렉션의 표준 방식의 문제 N>file.txt 즉, file.txt 파일에 설명 N을 연결하면, 그것이 현재 프로세스에 새로 갈래의 프로세스에 대해서만 작동 아니라는 점입니다.
그래서
$ echo hi 1>out.txt ; echo hii . out.txt 인사 보내드립니다지만, STDOUT에 hii를 인쇄합니다 이
어디 이것은 exec 우리 구출하러 온다. 우리가 추가하는 경우 exec 1>somefile.txt 후 스크립트의 나머지 출력 somefile.txt로 이동합니다
$. / test.sh는 out.txt뿐만 hii로 안녕 리디렉션됩니다
$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
마찬가지로 STDOUT 리디렉션뿐만 STDERR로 우리가 이런 짓을 할거야
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
그것은 현재의 문제를 해결합니다. 하지만 당신은 쉘 스크립트에서 파일의 '랜덤 액세스'를 달성 다음 예제를 통해 가고 싶어 수 있습니다. 예 출신 여기
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 리디렉션하는 것이 여기에 명확히



































