リモートマシン上の空のディレクトリをチェックする必要があるperlスクリプトがあります。kshを使用すると、次のシェルスクリプトを機能させることができます。
ksh# ssh user@host '[ "$(ls -A /empty/dir/* 2>/dev/null)" ] && echo "1" || echo "0"'
ディレクトリが空または存在しない場合、これは正しく「0」を返します。ディレクトリに何かが含まれている場合にのみ「1」を返します。
この行をperlスクリプト内に配置すると、次のようになります。
#!/usr/bin/perl
print `ssh user\@host '[ "$(ls -A /empty/dir/* 2>/dev/null)" ] && echo "1" || echo "0"'`
私がそこに何を入れても、それは「1」、空のディレクトリを返します。通常のシェルとperlスクリプトと比較してenv値を確認しましたが、それらは同じです。
このコマンドがperlスクリプトでのみ異なる結果を返す理由を誰かが知っていますか?
どちらのマシンも、デフォルトのシェルとしてKSHを備えたAIX6.1です。