Unixシステムでいくつかの耳のMD5を取得するためにこのコマンドを使用しようとすると、fanout
いくつかのエラーが発生します。
私のコードは次のとおりです
ears=ear1-ear2
cluster=abc
dmgr=server1
k=$(expr `echo $ears | grep -o "-" | wc -l` + 1)
fanout "$dmgr" " umask 022 ; for k in $(seq 1 $k) ; do for i in $(echo $ears | cut -d'-' -f$k) ; do echo /appl/as/bin/md5 /appl/as/var/spool/ears/${cluster}/$i ; done ; done
私が受け取るエラーは次のとおりです。
ksh: 0403-057 Syntax error at line 2 : `2' is not expected.
と参照できません。$i
ベストアンサー1
$(seq 1 $k)
このエラーは、コマンド内の補間によって発生しますfanout
。
説明すると...
実行seq 1 2
結果:
1
2
二重引用符の中に入れると、改行文字は重要なテキストのままになります。したがって、 fanout コマンドは次のように評価されます。
fanout server1 'umask 022 ; for k in 1
2 ; do for i in ear2 ; do echo /appl/as/bin/md5 /appl/as/var/spool/ears/abc/ ; done ; done'
2行目の内容がわからksh
ない2
ので失敗します。
を含むこの問題を解決できますが、xargs
2 番目の潜在的な問題に直面します。つまり、これをk
ループカウンタとして使用しますが、$k
ループが実行される前に評価する必要があるということです。また、スクリプトが実行される前に評価する必要があるサブシェルもありますが、実行$ears
時に変更されるループで使用されます。
私が一つ見つけたマニュアルページただし、fanout
複数のシステムに対して実行するコマンドがあり、なぜ単一のシステム()に対してループを実行したいのかわかりませんserver1
。fanout
aとaの違いを説明できれば仕える人そして耳より明確なコードを提案することもできます。しかし、私の最初の提案は次のとおりです。
ears='ear1,ear2'
cluster=abc
dmgr=server1
fanout "$dmgr" "/appl/as/bin/md5 /appl/as/var/spool/ears/${cluster}/{$ears}"