【发布时间】:2012-11-30 16:15:46
【问题描述】:
我有一个 perl 脚本需要检查远程机器上的空目录。使用 ksh 我可以获得以下 shell 脚本:
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”,空目录与否。我检查了与普通 shell 和 perl 脚本相比的 env 值,它们是相同的。
有没有人知道为什么这个命令只会在 perl 脚本中返回不同的结果?
两台机器都是 AIX 6.1,使用 KSH 作为默认 shell。
【问题讨论】:
-
Perl 可能正在调用 /bin/sh。您是否尝试过直接调用 ksh,
/bin/ksh ssh user…? -
我试过了。我收到错误“ksh: test: 0403-021 A] 字符丢失。”无论我指定 bash 还是 ksh。
-
该命令的
$(...)部分应该在远程主机上运行。本地主机使用sh还是ksh都没有关系。