쉘 리디렉션의 비트
여기서 우리가 일반적으로 쉘 리디렉션을 수행하는 방법이다
$ ./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을 출력합니다 2
곳이야 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 리디렉션하는 것으로 명확히



































