명령에서 정보를 얻고 gpstate -s
제거하려는 디버그 정보를 인쇄합니다. 특히 저장하고 싶은 행이 하나 있는데 바로 이 Master Host
행입니다. 환경 변수로 저장할 수 있도록 기본 호스트의 값(HostName으로 변경함)이 필요합니다.
20210805:00:02:22:025334 gpstate:HostName:gpadmin-[INFO]:-Obtaining Segment details from master...
20210805:00:02:22:025334 gpstate:HostName:gpadmin-[INFO]:-Gathering data from segments...
20210805:00:02:23:025334 gpstate:HostName:gpadmin-[INFO]:-----------------------------------------------------
20210805:00:02:23:025334 gpstate:HostName:gpadmin-[INFO]:--Master Configuration & Status
20210805:00:02:23:025334 gpstate:HostName:gpadmin-[INFO]:-----------------------------------------------------
20210805:00:02:23:025334 gpstate:HostName:gpadmin-[INFO]:- Master host = HostName
20210805:00:02:23:025334 gpstate:HostName:gpadmin-[INFO]:- Master postgres process ID = 5000
20210805:00:02:23:025334 gpstate:HostName:gpadmin-[INFO]:- Master data directory = /data/master/gpseg-1
마스터 호스트에서 모든 콘텐츠 가져오기 및 추가 콘텐츠를 사용해 보았지만 gpstate -s | sed -n -e 's/^.*Master\sHost //p'
빈 결과가 나왔습니다. 호스트 이름을 얻으려면 cut
after 명령을 사용할 계획입니다 .sed
답변1
sed 스크립트 와 관련하여 Master\sHost
실패할 수 있는 이유는 두 가지가 있습니다.
- 입력이
host
소문자로 시작하므로h
일치Host
하지 않습니다. \s
GNU sed에서만 지원되는 약어이며[[:space:]]
POSIX sed 또는[ \t]
모든 sed에서 사용할 수 있습니다.
당신은 그것을 사용할 수 있습니다 awk
:
$ gpstate -s | awk -F'= ' '/Master host/ { print $2 }'
HostName
그리고 sed
:
$ gpstate -s | sed -n '/Master host/s/.*= //p'
HostName