C에서는 프로그램이 실행되는 동안 stdout을 특정 위치로 리디렉션할 수 있습니다. 예를 들면 다음과 같습니다.
int fd = open("some_file", O_RDWR);
dup2(fd, STDOUT_FILENO);
printf("write to some_file\n");
./script.sh > some_file
bash 스크립트()를 실행할 때 stdout을 리디렉션 하지 않고 bash에서 이를 달성할 수 있습니까 ?
답변1
당신은 그것을 사용할 수 있습니다리디렉션복합 명령을 포함한 모든 명령 주변. 예를 들어:
some_function () {
echo "This also $1 to the file"
}
{
echo "This goes to the file"
some_function "goes"
} >some_file
echo "This does not go to the file"
some_function "does not go"
다음 명령을 호출하여 영구 리디렉션을 수행할 수 있습니다(스크립트가 끝나거나 다른 리디렉션으로 덮어쓰기될 때까지).exec
내장리디렉션은 있지만 명령은 없습니다. 예를 들어:
foo () {
echo "This does not go to the file"
exec >some_file
echo "This goes to the file"
}
foo
echo "This still goes to the file"
이러한 기능은 bash를 포함한 모든 Bourne/POSIX 스타일 쉘에서 사용할 수 있습니다.