[완료] shell 의 output redirection 기능의 활성화 여부를 알아내는 방법?
글쓴이: ssehoony / 작성시간: 수, 2008/12/17 - 12:23오후
ls 나 grep 같은 툴을 보면 --color=auto 라는 옵션이 있습니다.
auto의 의미는 stdout이 redirection 되면 color 를 off하고, stdout으로 출력할 때는 color를 on을 하는 기능인데요.
기능의 장점은 "ls > file.txt"와 같이 실행 했을 때, color 표시 기능으로 인해 file.txt에 ansi color code가 들어가면 가독성이 나뻐지는 경우 이 문제를 해결하는 기능입니다.
저 역시 이런 문제에 직면해 있습니다.
그냥 shell에서 실행할 때는 colorful하게 표시되면 가독성 면에서 좋은 반면에 cron job 등으로 주기적으로 실행 시키고 정상 작동 여부를 확인하기 위해 output 을 file로 남기면 ansi color code때문에 file의 가독성이 떨어집니다.
그래서 ls나 grep의 --color=auto 와 같은 기능을 구현하고 싶은데요.
어떻게 하면 redirection 방향이 표준출력인지 아니면, file등 다른 곳으로 redirection 됐는지 알아 낼 수 있을까요?
Forums:
흠
cron에서 다른 결과가 나온다면.
cron으로 돌릴때 주의해야 하는 건 일반 로그인 계정에서 적용되는 환경변수등이
그대로 적용되지 않기 때문에 필요시 수동으로 추가해줘야 합니다.
일반 계정에서는 ls가
alias ls='ls --color=auto'
로 alias가 걸려있어서 문제가 없는거라면
cron으로 돌리는 스크립트에서 ls가 저 alias가 걸려있지 않으면
스크립트 상단에 alias를 추가해주면 될 것이고.
alias된 명령때문에 생기는 문제라면 명령어 앞에 \를 붙여서
\ls 식으로 명령을 내리면 alias를 무시하고 raw명령(?)을 실행하니깐
그렇게 하면 될 것 같네요.
질문을 약간 오해
질문을 약간 오해 하신 것 같네요.
cron에서 말씀하신 환경 설정 문제로 서로 다른 작동을 한다는 의미가 아닙니다.
cron job은 예를 하나 든 것에 불과하고요.
제가 말한 상황은 "$ ls --color=auto" 와 "$ ls --color=auto > ls.txt" 라는 결과가 서로 다르다는 것입니다.
ls.txt에는 컬러 표시를 위한 ansi code가 포함되어있어야 하는데 사실 그렇지 안다는거지요.
"$ ls --color=always > ls_color.txt" 라고 해서 ls_color.txt를 vi로 열어보시면 ls.txt와는 다른다는 것을 알 수 있습니다.
이는 ls의 옵션이 --color=auto일 때는 output이 파일로 redirection되면 ansi code를 추가하지 않기 때문인데요.
어떻게 output이 redirection 됐는지 체크해서 상황에 따라 다른게 작동하는 건지가 궁금하다는 것입니다.
제가 잘못 이해했군요
제가 잘못 이해했군요
ls 소스를 보니 isatty함수로 판단하는 것 같네요.
test.c
테스트
man ls 해보면
man ls 해보면
stdout이 어디에 연결되어 있는지는 process 정보 중 file descriptor 정보를 보면 알 수 있는 것 같습니다.
lsof -p <pid> 를 하니까 나오네요.
참고 : http://www.cyberciti.biz/tips/linux-procfs-file-descriptors.html
간단하게 bash
간단하게 bash 스크립트로 확인해봤습니다.
emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~
http://xenosi.de/
https://xenosi.de/
오~ 그렇군요.
오~ 그렇군요. 감사합니다.
댓글 달기