셸 스 크 립 트 의 간단 한 사용: 8 - 입 출력 재 설정
6345 단어 각본
셸 입 출력 재 설정
스 크 립 트 가 실 행 될 때의 로그 와 같 습 니 다. 어떤 파일 에서 볼 필요 가 있 습 니 다. 각 스 크 립 트 의 로그 출력 을 통 일 된 파일 로 재 설정 하여 전체 프로젝트 의 실행 상황 을 감시 해 야 합 니 다.
출력 방향 변경
일반적으로 유 닉 스/리 눅 스 명령 이 실 행 될 때마다 세 개의 파일 을 엽 니 다.
표준 입력 파일 (stdin): stdin 의 파일 설명 자 는 0 이 고 유 닉 스 프로그램 은 기본적으로 stdin 에서 데 이 터 를 읽 습 니 다.
표준 출력 파일 (stdout): stdout 의 파일 설명 자 는 1 이 고 유 닉 스 프로그램 은 기본적으로 stdout 에 데 이 터 를 출력 합 니 다.
표준 오류 파일 (stderr): stderr 의 파일 설명 자 는 2 이 며, 유 닉 스 프로그램 은 stderr 흐름 에 오류 정 보 를 기록 합 니 다.
#简单的使用
echo “少了个参数” > logs.log
echo "this is a error" >> logs.log
who >> logs.log
입력
#显示文件名
wc -l logs.log
#不会显示文件名
wc -l < logs.log
후속 테스트 를 진행 할 파일 을 먼저 만 듭 니 다.
echo -e "预先准备的测试文件";
echo "测试例子1." > temp.txt;
echo "测试例子 2." >> temp.txt;
cat temp.txt;
echo "a1" > a1;
echo "a2" > a2;
echo "a3" > a3;
sudo chmod 000 a3;
ls -alF a*;
//ls -F
//可执行文件, 添加一个后缀*;
//文件夹, 添加一个后缀/;
//软连接, 添加一个后缀@;
#获得shell执行后的返回值
echo -e "获得返回值"
ls + ;
echo -e "执行ls + ;后返回 $?"
ls -alF ./ ;
echo -e "执行ls -alF ./ ;后返回 $?"
#标准输出stdout的重定位。
echo -e "重定向到stdout !"
ls + > out.txt
echo -e "执行ls + > out.txt返回值为 $?"
echo -e "out.txt中的内容为"
cat out.txt
rm out.txt
#这里由于+在ls命令时候不合法,后续的out.txt中内容为空
echo "=========================================="
#获得shell执行后的返回值
echo -e "获得返回值"
ls + ;
echo -e "执行ls + ;后返回 $?"
ls -alF ./ ;
echo -e "执行ls -alF ./ ;后返回 $?"
echo "=========================================="
#标准输出stdout的重定位
echo -e "重定向到stdout !"
ls + > out.txt
echo -e "执行ls + > out.txt返回值为 $?"
echo -e "out.txt中的内容为"
cat out.txt
rm out.txt
echo "=========================================="
#标准错误stderr重定位
echo -e "重定向到stderr"
ls + 2> out.txt
echo -e "ls + 2> out.txt 执行后返回结果为 $?"
echo -e "查看out.txt的内容为"
cat out.txt
rm out.txt
#执行后同样是返回2但是错误信息重定向到out.txt的文件中
echo "=========================================="
#分别重定向标准stdout与标准错误stderr到指定的文件
echo -e "重定向标准stdin和stderr"
cat a* 2>stderr.txt 1>stdout.txt
echo -e "执行cat a* 2>stderr.txt 1>stdout.txt 返回值$?"
echo -e "执行后的stderr.txt内容为"
cat stderr.txt
echo -e "执行后的stdout.txt内容为"
cat stdout.txt
rm stderr.txt stdout.txt
echo "=========================================="
#使用2>&1把标准错误stderr重定向到标准输出stdout
echo -e "吧stderr重定向到标准输出stdout"
#也可以使用cat a* &>out.txt可以实现通用的效果
cat a* >out.txt 2>&1
echo -e "执行结果返回为 $?"
echo -e "out.txt内容为"
cat out.txt
rm out.txt
echo "=========================================="
#把标准错误stderr重定向到/dev/null
echo -e "将stderr重定向到/dev/null"
cat a* 2>/dev/null
echo "执行后返回的结果为:$?"
#"/dev/null" 是一个特殊的设备文件,所有输入到其中的比特流都会被丢弃
실행 결과
获得返回值
ls: cannot access +: No such file or directory
执行ls + ;后返回 2
total 40
drwxr-xr-x 2 root root 4096 Apr 12 11:18 ./
drwxr-xr-x 3 root root 4096 Apr 11 14:28 ../
-rw-r--r-- 1 root root 3 Apr 11 22:36 a1
-rw-r--r-- 1 root root 3 Apr 11 22:36 a2
---------- 1 bin root 3 Apr 11 22:36 a3
-rwxrwxrwx 1 root root 1788 Apr 12 11:01 ioe.sh*
-rw-r--r-- 1 root root 9 Apr 11 22:44 output.txt
-rw-r--r-- 1 root root 9 Apr 12 11:31 out.txt
-rw-r--r-- 1 root root 1210 Apr 11 22:44 redirect.sh
-rw-r--r-- 1 root root 48 Apr 11 22:36 temp.txt
执行ls -alF ./ ;后返回 0
==========================================
重定向到stdout !
ls: cannot access +: No such file or directory
执行ls + > out.txt返回值为 2
out.txt中的内容为
==========================================
重定向到stderr
ls + 2> out.txt 执行后返回结果为 2
查看out.txt的内容为
ls: cannot access +: No such file or directory
==========================================
重定向标准stdin和stderr
执行cat a* 2>stderr.txt 1>stdout.txt 返回值0
执行后的stderr.txt内容为
执行后的stdout.txt内容为
a1
a2
a3
==========================================
吧stderr重定向到标准输出stdout
执行结果返回为 0
out.txt内容为
a1
a2
a3
==========================================
将stderr重定向到/dev/null
a1
a2
a3
执行后返回的结果为:0
==========================================
표준 출력 stdout 을 tee 의 표준 입력 stdin 으로 재 설정 합 니 다.
//"cat a*" 的标准输出 stdout 通过pipe( "|" )重定向为 tee 的标准输入;
//tee 把这些信息重定向到 out.txt 的同时,输出到 tee 的标准输出 stdout ;
//tee 的标准输出通过 pipe("|") 重定向到了 "cat -n" 的标准输入;
cat a* | tee out.txt | cat -n;
//把标准错误也重定向到stdout
cat a* 2>&1 | tee out.txt | cat -n;
//添加-a追加输出信息
执行cat a* 2>stderr.txt 1>stdout.txt 返回值0
이상 의 결과 분석
1) pipe ("|") 는 표준 출력 정보 만 처리 하기 때문에 오류 정 보 는 터미널 에서 직접 출력 되 고 방향 을 바 꾸 지 않 습 니 다.
2) tee 는 표준 입력 stdin 에서 a1, a2 의 내용 만 받 고 'cat - n' 을 통 해 출력 정보 에 줄 번 호 를 붙 여 tee 가 받 은 정 보 를 표시 한다.
3) out. txt 파일 을 보면 tee 명령 이 out. txt 로 출력 되 는 정 보 를 발견 할 수 있 습 니 다. "cat - n"의 정보 와 일치 합 니 다.
stdin 을 입력 으로 cat 를 사용 할 때의 표현
cat --help #可以看见cat -等价于 /dev/stdin
ls -alF | cat
ls -alF | cat - #和上边输出一样,
ls -alF | cat -n #输出序号
ls -alF | cat /dev/stdin
cat < a1
cat < a2
cat < temp.txt
텍스트 블록 을 셸 명령 으로 바 꾸 는 표준 입력 stdin
cat <log.txt
Hello word
ERR
cat log.txt
cat <> log.txt
Nice to meet
EOF
cat log.txt;
셸 파일 간 참조 호출
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Unity3D 시작하기(rolling ball) - 학습 노트만약 이 방법이 성공하지 못하면 각 구성 요소를 분류하여 다운로드할 수 있습니다. 항목은 3D를 선택하고 가져온 리소스는 None으로 선택할 수 있습니다. Scene: 각 게임마다 몇 개의 장면으로 구성되어 있으며,...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.