껍질 조금 리디렉션

2009년 5월 10일로 prashant
아래 출원 : 기술

여기에 우리가 어떻게 정상적으로 쉘 리디렉션을니까
$ ./pgm.sh args >out.txt 2>err.txt
내가 좀 실행 그것을 변경하려고 다음과 같이
$ ./pgm.sh args
요구 사항이 출력 및 오류가 일부 파일 이름에 가야과 내부 args에 따라 pgm.sh 계산. 한 설명의 경우는 언제 날짜 args의 일부 수 있습니다. 그래서 당신은 pgm_out_YYYYMMDD.txt을 / 디렉토리 것이거나 / / 같은 표준 출력에 가야 말 1

의 리디렉션하는 방법과 표준 문제가 N>file.txt 즉, N을 설명 file.txt 파일을 연결하면, 프로세스입니다 현재는 새로 작동에 대해서만 갈래의 과정이 아니라합니다.
그래서
$ echo hi 1>out.txt ; echo hii out.txt 의지 인사 보내지만, 표준 출력에 hii 인쇄합니다. 2

이것은 어디에있는지도 exec 우리의 구출 제공합니다. 추가하는 경우에는 우리가 exec 1>somefile.txt 다음 somefile.txt로 간다 스크립트의 나머지 출력

$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
$. / 인사뿐만 아니라 hii 리디렉션됩니다 out.txt에 test.sh

리디렉션 마찬가지로 표준 출력뿐만 아니라, 우리가 이런 일을 할거야 표준 오류에
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 out.txt 1> 중복이지만 여기서 명확히 우리가 1 리디렉션하는 전략중

댓글

    블로그 Disqus에 의해 제공 코멘트