Bash 스크립트에서 AWKing SSH 명령을 사용하면 잘못된 출력이 생성됨

Bash 스크립트에서 AWKing SSH 명령을 사용하면 잘못된 출력이 생성됨

Java 서버에서 일부 데이터를 가져오는 간단한 bash 스크립트에서 정보를 추출하려고 합니다. SSH 변수가 스크립트에서 실행될 때 awk로컬 파일에 쓰지 않으면 필요한 정보를 추출하기 위해 실행할 수 없는 것 같습니다. 제가 하고 있는 작업은 다음과 같습니다.

check=$(ssh [email protected] "/usr/local/bin/check_mq.sh")
ret=$?
cat=/bin/cat
awk=/usr/bin/awk
output=$($cat $check | $awk -F= '{print $4}' | $awk '{print $1}')
echo $output

echo $check내 스크립트에서 이런 일이 발생 한다면 .

backchannel_queue messages=0 messages_ready=0 messages_unacknowledged=0 

$check그러나 명령을 스크립트 에 넣으면 awk다음과 같은 출력이 제공됩니다.

/bin/cat: backchannel_queue: No such file or directory
/bin/cat: 'messages=0': No such file or directory
/bin/cat: 'messages_ready=0': No such file or directory
/bin/cat: 'messages_unacknowledged=0': No such file or directory

$output내 시스템의 텍스트 파일에 글을 써서 이 작업을 수행 할 수 있었습니다 .

 check_output="/home/user/Documents/scratch/check_output.txt"
 echo $check > $check_output
 output=$($cat $check_output | $awk -F= '{print $4}' | $awk '{print $1}')
 echo $output

$output여기서 뭔가 잘못하고 있는 것 같습니다. 파일 에 쓸 필요가 없습니다 . 아니면 이것이 유일한 선택입니까? 이 숫자를 변수에 넣은 후에는 몇 가지 IF명령문을 사용하여 이 숫자가 그보다 큰지 확인할 계획입니다 x.

답변1

파일 목록을 알려주면 cat해당 목록은 실제로 파일이 아니라 작업하려는 항목입니다. 이 작업을 수행하는 echo대신 사용하고 싶습니다 cat.

답변2

사용 중인 명령의 경로를 변수에 저장하지 마십시오. 전혀 필요하지 않습니다. 비표준 경로(사용하지 않는 경로)에서 도구를 사용하는 경우 해당 경로를 수정하십시오 $PATH.

당신은 을 사용하고 있습니다 cat $check. 이에 대해 주목해야 할 두 가지 사항이 있습니다.

  1. $check공백은 필드 분할되어 여러 단어로 변환됩니다. 파일 이름 와일드카드 문자가 포함된 경우 파일 이름 글로빙이 됩니다.

  2. cat결과 단어는 파일 이름으로 예상되는 에 제공됩니다 . 여기서 오류가 발생합니다.

ssh대신 다음 으로 직접 파이프하십시오 awk.

ssh [email protected] "/usr/local/bin/check_mq.sh" |
awk -F '=' '{ print $NF }'

=이는 줄의 마지막 숫자 뒤에 숫자를 출력한다고 가정합니다 .

숫자가 일부 변수보다 큰지 테스트하려면 다음을 수행하십시오 $x.

ssh [email protected] "/usr/local/bin/check_mq.sh" |
awk -F '=' -v x="$x" '$NF > x { printf("%d is more than %d\n", $NF, x) }'

답변3

변수이기 때문에 echo대신 사용하세요 . 다음과 같이 사용cat$check

check=$(ssh [email protected] "/usr/local/bin/check_mq.sh")
ret=$?
cat=/bin/cat
awk=/usr/bin/awk
output=$(echo $check | $awk -F= '{print $4}' | $awk '{print $1}')
echo $output

관련 정보