셸 스 크 립 트 의 간단 한 사용: 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;

셸 파일 간 참조 호출

좋은 웹페이지 즐겨찾기