itsource

Bash에서 명령 출력을 숨기는 방법

mycopycode 2023. 5. 2. 22:40
반응형

Bash에서 명령 출력을 숨기는 방법

최종 사용자를 위해 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>&-
    

    순서를 주의하여 기록합니다.>&- stdout을 닫습니다. 이것이 당신이 하고 싶은 일입니다.&>-stdout 및 stderr을 이름이 지정된 파일로 리디렉션합니다.-당신이 하고 싶은 일이 아닙니다.처음에는 동일하게 보이지만 나중에는 작업 디렉토리에 파일을 만듭니다.쉽게 기억할 수 있습니다.>&2stdout을 설명자 2(stderr)로 리디렉션합니다.>&3stdout을 설명자 3으로 리디렉션합니다.>&-stdout을 막다른 골목으로 리디렉션합니다(즉, stdout을 닫습니다).

    또한 일부 명령은 닫힌 파일 설명자("쓰기 오류: 불량 파일 설명자")를 특히 잘 처리하지 못할 수 있으므로 더 나은 해결책은...

  • 출력을 로 리디렉션하여 모든 출력을 수락하고 아무것도 하지 않습니다.다음과 같이 표시됩니다.

    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을 할 을▁by▁for▁doing▁command▁a위여하.

MyCommand >/dev/null

전원을 끕니다.stderr수행:

MyCommand 2>/dev/null

해제하려면 다음을 수행합니다.

MyCommand >/dev/null 2>&1 

2>&1stdout과 로 send stderr을 합니다.

출력을 다음으로 리디렉션할 수 있습니다./dev/null/dev/null에 대한 자세한 내용은 이 링크를 참조하십시오.

다음과 같은 방법으로 명령 출력을 숨길 수 있습니다.

echo -n "Installing nano ......"; yum install nano > /dev/null; echo " done."; 

을 "표준출을다리션렉디로으음력션▁the"로 리디렉션합니다./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은 옵션있다습니이▁yum .-q출력을 억제합니다.

당신은 또한 확실히 사용하고 싶을 것입니다.-y

echo "Installing nano..."
yum -y -q install nano

yum에 대한 모든 옵션을 보려면 다음을 사용합니다.man yum.

하여 이 할 수도 이 때 특히 합니다. 이것은 특히 당신이 없을 때 유용합니다./dev/null.

예, 사용할 수 없는 상황이 발생했습니다./dev/null.

제가 찾은 해결책은 출력을 변수에 할당하는 것이었습니다. 변수는 이후에 절대 사용하지 않을 것입니다.

hide_output=$([[ -d /proc ]] && [[ mountpoint -q /proc ]] && umount -l /proc)

다음 항목:command > /dev/null 이것: ( 오는이것: (오류를 억제하기 위해서도)command > /dev/null 2>&1

되지 .2>개발/개발자 앞에 있습니다.

.SILENT:

"를 입력합니다.SILENT: "콜론이 없는 스크립트의 시작 부분입니다.

언급URL : https://stackoverflow.com/questions/18062778/how-to-hide-command-output-in-bash

반응형