kshスクリプトの構文エラー: '2'は必要ありません。

kshスクリプトの構文エラー: '2'は必要ありません。

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ので失敗します。

を含むこの問題を解決できますが、xargs2 番目の潜在的な問題に直面します。つまり、これをkループカウンタとして使用しますが、$kループが実行される前に評価する必要があるということです。また、スクリプトが実行される前に評価する必要があるサブシェルもありますが、実行$ears時に変更されるループで使用されます。

私が一つ見つけたマニュアルページただし、fanout複数のシステムに対して実行するコマンドがあり、なぜ単一のシステム()に対してループを実行したいのかわかりませんserver1fanoutaとaの違いを説明できれば仕える人そしてより明確なコードを提案することもできます。しかし、私の最初の提案は次のとおりです。

ears='ear1,ear2'
cluster=abc
dmgr=server1

fanout "$dmgr" "/appl/as/bin/md5 /appl/as/var/spool/ears/${cluster}/{$ears}"

おすすめ記事