bash 쉘 스크립트를 시도했는데 작은 문제가 발생했습니다.
# hostname --short
7phdsn01
# virsh --readonly list --state-running --name
Nagios
# set $(hostname --short)=$(virsh --readonly list --state-running --name)
# echo $?
0
# echo $7phdsn01
phdsn01
#
조언해주세요.
# unset $7phdsn01
# set $(hostname --short)=$(virsh --readonly list --state-running --name)
# echo $7phdsn01
phdsn01
#
답변1
이 set
명령은 처럼 작동하지 않습니다 bash
. 시도해 볼 수도 있습니다 declare
.
호스트 이름을 따서 명명된 변수를 사용하려는 것 같습니다. 아쉽게도 호스트 이름은 숫자로 시작하므로 변수 이름으로 사용할 수 없습니다.
(7번째 위치 인수)가 설정되지 않고 null로 확장되고 나머지 문자열이 뒤따르기 때문에 명령이 echo $7phdsn01
출력됩니다 .phdsn01
$7
내가 사용할 수도
declare -A state
state["$(hostname --short)"]=$(virsh --readonly list --state-running --name)
그러면 이름이 붙은 연관 배열이 생성됩니다 state
. 다음 줄에서는 명령에 의해 제공된 키 값을 hostname --state
명령의 출력으로 설정합니다 virsh
.
배열의 값과 키는 state
다음과 같습니다.
for host in "${!state[@]}"; do
printf 'Host %s is in state %s\n' "$host" "${state[$host]}"
done
단일 호스트에 대해 이 작업을 수행하는 경우 그렇게 화려할 필요는 없습니다. 대신 두 가지 변수를 사용하세요.
host=$(hostname --short)
state=$(virsh --readonly list --state-running --name)
printf 'Host %s is in state %s\n' "$host" "$state"