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
単一のホストに対してこれを行う場合、そのようにカラフルである必要はありません。代わりに2つの変数を使用してください。
host=$(hostname --short)
state=$(virsh --readonly list --state-running --name)
printf 'Host %s is in state %s\n' "$host" "$state"