プロが教える店舗&オフィスのセキュリティ対策術

Solaris10を使用しています。
コマンドの実行結果をそのまま変数として使用するために
以下のスクリプトを実行したところ・・

--------------------
#!/bin/sh

read a b c <<EOF
`ls -l aaa.log`
EOF

echo $a
echo $b
echo $c

--------------------

「ls -l aaa.log」の結果は、-rw-r--r-- 1 root root 211 1月 13 11:58 aa.log となるので

$a=-rw-r--r--
$b=1
$c=root

という結果を期待していたのですが、「/tmp/sh*** cannot open!」とエラーとなってしまいます。***は任意の数字です。
/tmpには上記で cannot open! となった「sh***」よりひとつ若い番号のファイルが作成され、
中は「ls -l aaa.log」の結果が記載されていました。
CentOS5.2、Cygwinでは期待した結果が得られたのですが、SolarisではNGでした。
何かSolaris特有の問題でもあるのでしょうか?ご教示願います。

A 回答 (2件)

試しに FreeBSD の sh と Linux でも実行してみましたが、ちゃんと動作しますので Solaris がちょっと、という気はします。



それで代替方法ですが、

v=`ls -l aaa.log`
set -- $v
a=$1
b=$2
c=$3

とかは昔から良く利用しますよね。shift も使えるので loop でも使えます。
または、

a=${v%% *}
b=${v#* }

などの置換も場合によってはいいかも。
    • good
    • 0
この回答へのお礼

個人的にもSolarisなのかぁという気はしていました。。
代替方法までご提示していただき、大変助かりました。

ありがとうございました!

お礼日時:2011/01/13 17:00

CentOSはLinux、CygwinはUNIXもどきのWindowsツール


どちらもSolarisとは違いますね。同じ結果を期待する方が間違ってます。
Solaris特有の問題とみなすか、CentOSやCygwinの問題と見なすかは見解の相違でしょうね。
逆のケースだってたくさんありますから。

ちなみにそのシェルスクリプトを
sh -x シェルスクリプト
で実行したらどうなりますか?
    • good
    • 0
この回答へのお礼

sh -x で実行しても出力されるエラーに変化はありませんでした。

このスクリプトでは対応できなさそうということが分かったので
別な方法で対応したいと思います。

ありがとうございました。

お礼日時:2011/01/13 16:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!