기술적으로 stdin/stdout/stderr이 스크립트를 호출하는 내용을 모르기 때문에 "리디렉션"되는지 여부를 알 수있는 방법이 없습니다. 다른 쉘에서 호출하지 않으면 "리디렉션"개념이 없습니다.
당신이해야 할 일은 in/out/err 파일 디스크립터가 (터미널, FIFO, 파이프, 장치, 파일 등) 유형입니다. 일반적으로 출력물이 일부 사용자의 화면으로 이동하는지 또는 다른 프로세스로 이동하는지 여부를 감지하기 만하면됩니다. 이 경우 매트의 대답에 따라 [ -t 1 ]
을 사용하십시오.
프로세스가 리디렉션 된 위치와 경로를 확인하려면 심볼릭 링크 /proc/$$/fd/1
및 /proc/$$/fd/2
의 대상을 검사하십시오.
누구든지 ./myscript.sh > /dev/pts/1234
을 사용하여 프로세스의 출력을 다른 터미널에 연결할 수 있습니다. 그러면 "방향이 바뀌 었"지만 stdout은 여전히 터미널이됩니다.
예 :
$ ls -l /proc/$$/fd/1 > results
$ bash -c 'ls -l /proc/$$/fd/1 >>results' > /dev/null
$ bash -c 'ls -l /proc/$$/fd/1 >>results' |cat
$ bash -c 'ls -l /proc/$$/fd/1 >>results' > /dev/pts/0
$ cat results
lrwx------ 1 je4d je4d 64 2012-02-17 21:09 /proc/2463/fd/1 -> /dev/pts/11
l-wx------ 1 je4d je4d 64 2012-02-18 13:17 /proc/8302/fd/1 -> /dev/null
l-wx------ 1 je4d je4d 64 2012-02-18 13:17 /proc/8304/fd/1 -> pipe:[222798]
l-wx------ 1 je4d je4d 64 2012-02-18 13:17 /proc/8307/fd/1 -> /dev/pts/0
[ -t 1 ]
는 사람들의 1, 4 마찬가지 일 것이다.
내가 원하는대로 작동합니다! 고마워, 많이 – Sigmun