최종 사용자를 위해 Bash 스크립트를 더 우아하게 만들고 싶습니다. Bash가 명령을 실행할 때 출력을 숨기려면 어떻게해야합니까?
예를 들어 Bash가 실행될 때
yum install nano
다음은 Bash를 실행 한 사용자에게 표시됩니다.
Loaded plugins: fastestmirror
base | 3.7 kB 00:00
base/primary_db | 4.4 MB 00:03
extras | 3.4 kB 00:00
extras/primary_db | 18 kB 00:00
updates | 3.4 kB 00:00
updates/primary_db | 3.8 MB 00:02
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package nano.x86_64 0:2.0.9-7.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
nano x86_64 2.0.9-7.el6 base 436 k
Transaction Summary
================================================================================
Install 1 Package(s)
Total download size: 436 k
Installed size: 1.5 M
Downloading Packages:
nano-2.0.9-7.el6.x86_64.rpm | 436 kB 00:00
warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Importing GPG key 0xC105B9DE:
Userid : CentOS-6 Key (CentOS 6 Official Signing Key) <centos-6-key@centos.org>
Package: centos-release-6-4.el6.centos.10.x86_64 (@anaconda-CentOS-201303020151.x86_64/6.4)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : nano-2.0.9-7.el6.x86_64 1/1
Verifying : nano-2.0.9-7.el6.x86_64 1/1
Installed:
nano.x86_64 0:2.0.9-7.el6
Complete!
이제 사용자로부터 이것을 숨기고 대신 표시하고 싶습니다.
Installing nano ......
이 작업을 어떻게 수행 할 수 있습니까? 스크립트를보다 사용자 친화적으로 만드는 데 확실히 도움이 될 것입니다. 오류가 발생하면 사용자에게 표시되어야합니다.
일련의 명령이 실행되는 동안 동일한 메시지를 표시하는 방법을 알고 싶습니다.
답변
이것을 사용하십시오.
{
/your/first/command
/your/second/command
} &> /dev/null
설명
명령에서 출력을 제거하려면 두 가지 옵션이 있습니다.
-
더 이상 입력을받지 않도록 출력 설명자 파일을 닫습니다. 다음과 같이 보입니다.
your_command "Is anybody listening?" >&-
일반적으로 출력은 파일 설명자 1 (stdout) 또는 2 (stderr)로 이동합니다. 파일 설명자를 닫으면
&>
(아래)와 호환되지 않는 특수 BASH 구문 이므로 번호가 매겨진 모든 설명자에 대해 그렇게해야합니다>&-
./your/first/command >&- 2>&-
순서에주의하십시오 :
>&-
closes stdout , 원하는 작업입니다.&>-
stdout 및 stderr를-
(하이픈) 이라는 파일로 리디렉션 합니다. 처음에는 똑같아 보이지만 후자는 작업 디렉토리에 stray 파일을 만듭니다. 기억하기 쉽습니다 :>&2
stdout을 디스크립터 2 (stderr)로>&3
리디렉션하고, stdout을 디스크립터 3으로>&-
리디렉션 하고, stdout을 데드 엔드로 리디렉션합니다 (즉, stdout을 닫습니다).또한 일부 명령은 닫힌 파일 설명자를 특히 잘 처리하지 못할 수 있습니다 ( “쓰기 오류 : 잘못된 파일 설명자”). 이것이 더 나은 해결책이 될 수있는 이유입니다.
-
/dev/null
모든 출력을 받아들이고 아무것도 수행하지 않는로 출력을 리디렉션 합니다. 다음과 같이 보입니다.your_command "Hello?" > /dev/null
파일에 대한 출력 리디렉션의 경우 stdout과 stderr를 매우 간결하게 동일한 위치로 보낼 수 있지만 bash에서만 가능합니다.
/your/first/command &> /dev/null
마지막으로 여러 명령에 대해 한 번에 동일한 작업을 수행하려면 전체를 중괄호로 묶습니다. Bash는 이것을 명령 그룹으로 취급 하여 출력 파일 설명자를 집계하여 한 번에 모두 리디렉션 할 수 있습니다. ( command1; command2; )
구문을 사용하는 하위 셸에 익숙하다면 중괄호가 파이프에 포함하지 않는 한 중괄호가 하위 셸을 생성하지 않으므로 내부에 변수를 설정할 수 있다는 점을 제외하면 중괄호가 거의 동일한 방식으로 작동한다는 것을 알 수 있습니다.
{
/your/first/command
/your/second/command
} &> /dev/null
자세한 내용, 옵션 및 구문 은 리디렉션에 대한 bash 매뉴얼을 참조하십시오 .
답변
stdout을 / dev / null로 리디렉션 할 수 있습니다.
yum install nano > /dev/null
또는 stdout과 stderr를 모두 리디렉션 할 수 있습니다.
yum install nano &> /dev/null
.
그러나 프로그램에 조용한 옵션이 있다면 훨씬 좋습니다.
답변
프로세스에는 일반적으로 두 가지 출력이 있습니다. stdout (표준 출력) 및 stderr (표준 오류)입니다.
일반적으로 정보 메시지는로 이동 sdout
하고 오류 및 경고는로 이동합니다 stderr
.
다음 stdout
을 수행하여 명령을 끌 수 있습니다.
MyCommand >/dev/null
다음 stderr
을 수행 하여 끄십시오 .
MyCommand 2>/dev/null
둘 다 끄 려면 다음을 수행 할 수 있습니다.
MyCommand 2>&1 >/dev/null
는 2>&1
표준 출력과 같은 장소에 표준 오류를 보내 말한다.
답변
출력을 /dev/null
. / dev / null에 대한 자세한 정보는이 링크를 읽으십시오 .
다음과 같은 방법으로 comand의 출력을 숨길 수 있습니다.
echo -n "Installing nano ......"; yum install nano > /dev/null; echo " done.";
표준 출력을로 리디렉션 /dev/null
하지만 표준 오류는 아닙니다. 예를 들어 yum
패키지를 찾을 수없는 경우 설치 중에 발생하는 오류가 표시 됩니다.
echo -n "Installing nano ......"; yum install nano &> /dev/null; echo " done.";
이 코드는 표준 오류와 표준 출력이 모두 리디렉션되어 /dev/null
.
답변
>/dev/null 2>&1
모두 뮤트 stdout
및stderr
yum install nano >/dev/null 2>&1
답변
이 경우 출력을 제거하기 위해 bash를 사용해서는 안됩니다. Yum에는 -q
출력을 억제 하는 옵션 이 있습니다.
가장 확실히 사용하고 싶을 것입니다. -y
echo "Installing nano..."
yum -y -q install nano
yum에 대한 모든 옵션을 보려면를 사용하십시오 man yum
.
답변
.SILENT:
콜론없이 스크립트 시작 부분에 “.SILENT :”를 입력합니다.