스크립트 출력은 매개변수에 따라 다릅니다.

스크립트 출력은 매개변수에 따라 다릅니다.

몇 줄의 텍스트를 인쇄하는 스크립트가 있습니다. 이 텍스트는 다른 프로세스에서 구성으로 사용됩니다.

프로그램을 정상적으로 실행하면 표준 출력을 파일로 리디렉션하고 정상적으로 작동합니다.

./generateConfig.sh > normal.cfg

그러나 문제는 Normal.cfg가 실제로 상수이고 추가 인수(예: -o, 인수 없음)를 제공하여 사용자에게 파일로 인쇄하거나 화면에 인쇄할 수 있는 옵션을 제공하고 싶다는 것입니다.

스크립트 내용이 다음과 같은 경우:

#!/bin/bash
echo "8.8.8.8"

매개변수에 따라 파일이나 표준 출력으로 인쇄되도록 출력을 매개변수화하려면 어떻게 해야 합니까?

이것은 작동하지 않는 것 같습니다:

#!/bin/bash
output="/dev/stdout"
if [ $# -gt 0 ]; then
  output="normal.cfg"
fi
echo "8.8.8.8" > $output

답변1

몇 가지 방법들:

함수

 #! /bin/sh -
 [ "$#" -gt 0 ] && redir=true || redir=false
 redir() if "$redir"; then "$@" > normal.cfg; else "$@"; fi

 redir echo 8.8.8.8

별명:

 #! /bin/sh -
 [ -z "$BASH_VERSION" ] || shopt -s expand_aliases

 [ "$#" -gt 0 ] && alias redir='>normal.cfg' || alias redir=

 redir echo 8.8.8.8

posh( 비활성화된 별칭 에는 적용되지 않습니다 .원천( .명령 사용) AT&T 구현에서 ksh).

개인 파일 설명자:

 #! /bin/sh -
 [ "$#" -gt 0 ] && exec 3> normal.cfg || exec 3>&1

 echo 8.8.8.8 >&3

(ksh93을 제외한 많은 쉘은 fd 3에 close-on-exec 플래그를 설정하지 않으므로 수동으로 실행된 명령을 닫아야 할 수도 있습니다)

답변2

전체 스크립트 출력의 리디렉션을 사용할 수 있습니다 exec.

#! /bin/bash

if [[ $1 = -o ]]
then
    exec > "$2"
fi

echo "8.8.8.8"

이제 실행 스크립트를 사용하면 -o foo출력이 파일에 저장됩니다 foo.

$ ./foo.sh 
8.8.8.8
$ ./foo.sh -o bar
$ cat bar
8.8.8.8

답변3

다음을 사용해 보세요:

#!/bin/bash
output="normal.cfg"
if [ $# -gt 0 ]; 
 then
  echo "8.8.8.8" > $output
 else
  echo "8.8.8.8"
fi

좀 더 복잡한 작업을 수행하려면 tee다음 명령을 사용해 보세요.여기에서 예를 참조하세요..

관련 정보