的shell命令我有一個需要檢查遠程計算機上的空目錄中的perl腳本。使用KSH我可以得到下面的shell腳本的工作:不同的結果與進出Perl腳本
ksh# ssh [email protected] '[ "$(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」,空目錄與否。我已經檢查了env值與普通shell和perl腳本相比,它們是相同的。
沒有人有任何想法,爲什麼這個命令只會在Perl腳本返回不同的結果?
兩款機器AIX 6.1 KSH作爲默認的shell。就好像它是雙引號內傳遞到操作系統之前
Perl是可能調用/ bin/sh的。你有沒有試過直接調用ksh,'/ bin/ksh ssh user ...'? – sidyll
我試過了。我收到錯誤'ksh:test:0403-021 A]字符丟失。'不管我是否指定bash或ksh。 –
該命令的'$(...)'部分應該在遠程主機上運行。本地主機使用sh還是ksh並不重要。 – mob