스 크 립 트 명령 뒤의 2 > & 1 은 무슨 뜻 입 니까?
때때로 우 리 는 이러한 스 크 립 트 호출 을 자주 볼 수 있다.
여기 2 > & 1 이 무슨 뜻 이에 요?어떻게 이해 해 야 합 니까?먼저 결론: 위의 호출 은.../test. sh 의 출력 을 log. txt 파일 로 재 설정 하 는 동시에 표준 오류 도 log. txt 파일 로 재 설정 하 는 것 을 나타 낸다.
무슨 묘용 이 있 는가
(어떤 역할 인지 알 았 다 면 이 소절 을 뛰 어 넘 을 수 있다) 위 에 무슨 뜻 이 있 을 까?스 크 립 트 test. sh 가 있다 면 다음 예 를 살 펴 보 겠 습 니 다.
#!/bin/bash
date #
while true #
do
# 2
sleep 2
whatthis #
echo -e "std output"
done
스 크 립 트 에서 현재 날 짜 를 인쇄 한 다음 2 초 간격 으로 whatthis 를 실행 하고 문 자 를 인쇄 합 니 다.시스템 에 whatthis 명령 이 존재 하지 않 기 때문에 실행 이 잘못 될 수 있 습 니 다.이 스 크 립 트 의 인쇄 결 과 를 저장 하려 면 test. sh 결 과 를 log. txt 로 바 꾸 면 됩 니 다.
4. 567914. 집행 결 과 는 다음 과 같다.
ubuntu$ ./test.sh >log.txt
./test.sh: 7: whatthis:
우 리 는 분명히 인쇄 내용 을 log. txt 로 재 설정 하 였 으 나, 이 잘못된 정 보 는 log. txt 로 재 설정 하지 않 았 다.프로그램 을 사용 하여 이 스 크 립 트 를 호출 하면 스 크 립 트 로 그 를 볼 때 이 오류 정 보 를 전혀 볼 수 없습니다.다음 방식 을 사용 하면 오류 정 보 를 log. txt 로 다시 설정 합 니 다.
4. 567914. 이러한 방식 으로 스 크 립 트 를 호출 하면 잘못된 정 보 를 잘 저장 하여 문 제 를 찾 는 데 도움 을 줄 수 있 습 니 다.
어떻게 이해 합 니까?
모든 프로그램 이 실 행 된 후에 적어도 세 개의 파일 설명 자 를 엽 니 다. 각각 0: 표준 입력 입 니 다.1: 표준 출력;2: 표준 오류.예 를 들 어 앞의 test. sh 스 크 립 트 에 대해 우 리 는 아래 절 차 를 통 해 적어도 세 개의 파일 설명 자 를 열 었 다.
./test.sh #
ps -ef|grep test.sh # , ps test.sh pid
hyb 5270 4514 0 19:20 pts/7 00:00:00 /bin/bash ./test.sh
hyb 5315 5282 0 19:20 pts/11 00:00:00 grep --color=auto test.sh
test. sh 의 pid 5270 을 볼 수 있 습 니 다. 관련 fd 디 렉 터 리 에 들 어 갑 니 다:
cd /proc/5270/fd # 5270
ls -l #
0 -> /dev/pts/7
1 -> /dev/pts/7
2 -> /dev/pts/7
255 -> /home/hyb/workspaces/shell/test.sh
test. sh 가 0, 1, 2 세 개의 파일 설명 자 를 열 었 습 니 다.마찬가지 로 관심 이 있 으 면 다른 실행 프로 세 스 의 파일 설명자 가 열 린 상황 도 볼 수 있 습 니 다. 닫 히 지 않 으 면 이 세 개의 파일 설명자 가 있 습 니 다.
그러면 이 제 는 앞의 의문 을 쉽게 이해 할 수 있 습 니 다. 2 > & 1 은 파일 설명 2 (표준 오류 출력) 의 내용 을 파일 설명자 1 (표준 출력) 로 바 꾸 는 것 을 나타 내 는데 왜 1 앞 에 & 가 필요 합 니까?& 가 없 을 때 1 은 일반적인 파일 로 여 겨 집 니 다. & 방향 을 바 꾸 는 목 표 는 파일 이 아니 라 파일 설명자 입 니 다.앞에서 알 았 듯 이 test. sh > log. txt 는 파일 설명자 1 의 내용 을 파일 log. txt 로 재 설정 하면 최종 표준 오류 도 log. txt 로 재 설정 합 니 다.저 희 는 똑 같이 앞의 방법 을 통 해 test. sh 프로 세 스 의 파일 설명자 상황 을 다음 과 같이 볼 수 있 습 니 다.
0 -> /dev/pts/7
1 -> /home/hyb/workspaces/shell/log.txt
2 -> /home/hyb/workspaces/shell/log.txt
255 -> /home/hyb/workspaces/shell/test.sh
파일 설명자 1 과 2 가 모두 log. txt 파일 을 가리 키 는 것 을 뚜렷하게 볼 수 있 고 우리 가 최종 적 으로 원 하 는 효 과 를 얻 을 수 있 습 니 다. 표준 오류 출력 을 파일 로 다시 설정 합 니 다.그것들 은 또 두 가지 등가 표기 법 이 있다.
./test.sh >& log.txt
./test.sh &> log.txt
총결산
우 리 는 앞의 내용 을 정리 합 시다.
프로그램 이 실행 되면 표준 입력, 표준 출력, 표준 오류 출력 등 세 개의 파일 설명 자 를 엽 니 다.스 크 립 트 를 호출 할 때 표준 오류 출력 을 2 > & 1 로 바 꿀 수 있 습 니 다.스 크 립 트 의 오 류 를 볼 때 표준 출력 을 파일 로 바 꿀 수 있 으 며, 표준 오 류 는 콘 솔 에 인쇄 되 어 보기 편 합 니 다.
>>log.txt log.txt 。
/proc/ id/fd , 。
사고 하 다.
다음 호출 은 표준 오류 출력 을 파일 로 바 꿉 니까?왜?
./test.sh 2>&1 >log.txt
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
바이너리 파일cat 또는tail, 터미널 디코딩 시 처리 방법cat으로 바이너리 파일을 보려고 할 때 코드가 엉망이 되어 식은땀이 났다. 웹에서 스크롤된 정보의 처리 방법과alias의 설정을 요약합니다. reset 명령을 사용하여 터미널을 재설정합니다.이렇게 하면 고치지 못하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.