스크립트의 모든 출력을 파일로 리디렉션하고 비밀번호를 바꾸려면 어떻게 해야 합니까?

스크립트의 모든 출력을 파일로 리디렉션하고 비밀번호를 바꾸려면 어떻게 해야 합니까?

AIX 7.2에서 ksh 스크립트를 실행하고 있습니다.

디버그 모드에서 스크립트가 수행하는 모든 작업을 brkpt 파일로 리디렉션하고 싶습니다.
스크립트는 다른 애플리케이션에도 로그인하므로 비밀번호(예: "pw123_")를 사용합니다.

 exec > $brkpt_file 2>&1
 set -xv
 dsmadmc -id=admin -pa=pw123_ q pr

리디렉션은 잘 작동하지만 brkpt 파일에 표시되지 않도록 비밀번호 문자열을 "***"로 바꾸고 싶습니다.

이것은 명령줄에서 잘 작동합니다.

 echo "dsmadmc -id=admin -pa=pw123_ q pr" | sed "s/-pa=[[:graph:]]* /-pa=*** /g"
result
 dsmadmc -id=admin -pa=*** q pr

하지만 이 "sed"를 "exec"와 결합하자마자:
a) 출력이 더 이상 파일로 리디렉션되지 않고 화면으로 리디렉션됩니다.
b) 비밀번호 문자열이 대체되지 않습니다.

 exec | sed 's/-pa.*=[[:graph:]]* /pa=*** /g' > $brkpt_file 2>&1
 set-xv
 dsmadmc -id=admin -pa=pw123_ q pr
result
 + dsmadmc -id=admin -pa=pw123_ q pr
 + ... other stuff of script
 

brkpt에서 모든 스크립트 내용을 가져오고 비밀번호를 숨기는 방법은 무엇입니까?

답변1

exec출력을 다른 프로그램으로 직접 파이프하는 데 사용할 수 없으며 출력을 파일로 리디렉션하는 데만 사용할 수 있습니다.

다행히 UNIX에서는 모든 것이 파일처럼 보입니다.

ksh(및 POSIX 호환성)의 경우 명명된 fifo를 생성하고 스크립트 출력을 해당 파일로 리디렉션해야 합니다.

#!/bin/ksh

fifo=./exec.fifo
log=./exec.ksh.log

# delete the fifo if it already exists
[ -e "$fifo" ] && rm -f "$fifo"

mkfifo "$fifo"

# now run the sed script in the background.  Its purpose is to modify
# the input coming from the fifo before saving it to the log file
( sed -e 's/-pa=[^ ]* /-pa=*** /g' < "$fifo" > "$log" ) &

# set up a function and trap to delete the fifo on exit.
cleanup () { rm -f "$fifo" ;}
trap cleanup EXIT

# now do the exec
exec > "$fifo"

# and finally do something that produces some output.
echo "dsmadmc -id=admin -pa=pw123_ q pr" 

스크립트를 실행하면 출력이 sed와 fifo를 통해 필터링된 후 로그 파일로 리디렉션됩니다.

$ ./exec.ksh
$ cat exec.ksh.log 
dsmadmc -id=admin -pa=*** q pr

하지만 를 사용하면 bash더 쉽습니다 . 당신은 그것을 사용할 수 있습니다프로세스 교체fifo 대신 출력을 리디렉션할 "파일"을 제공합니다(이식 가능한 쉘 스크립트 작성을 선호하는 경우 fifo 접근 방식이 계속 작동합니다).

예를 들어:

#!/bin/bash

exec 1> >(sed 's/-pa=[^ ]* /-pa=*** /g' > ./exec.bash.log)

echo "dsmadmc -id=admin -pa=pw123_ q pr" 

마찬가지로 출력은 로그 파일에 저장되기 전에 sed에 의해 수정됩니다.

$ ./exec.bash
$ cat exec.bash.log 
dsmadmc -id=admin -pa=*** q pr

관련 정보