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
. 이에 대해 주목해야 할 두 가지 사항이 있습니다.
$check
공백은 필드 분할되어 여러 단어로 변환됩니다. 파일 이름 와일드카드 문자가 포함된 경우 파일 이름 글로빙이 됩니다.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