2012-02-26 82 views
1

我有点用Perl一个小白的,不能看什么不对的脚本:获得一个Perl命令输出到变量壳

#!/bin/sh 
randAnPass=true; 
if [ $randAnPass = true ] 
then 
pass=perl /root/bin/randpass 
else 
# prompt for setting user's password .. 
echo -n "pick password for '${user}': " 
read pass 
fi 
#echo $randAnPass; 
echo "Generated pass = $pass"; 

出于某种原因,输出:

r4Nd0mP 
Generated pass = 

我希望它输出

Generated pass = r4Nd0mP 
+1

使用反引号捕获命令的输出,你”只是运行命令。 – 2012-02-26 01:30:53

+1

@Dave:反引号? '$()'好得多。 – 2012-02-26 01:32:11

+0

我不明白它有多好,但肯定的是,它也可以。 – 2012-02-26 01:32:56

回答

4
pass=`perl /root/bin/randpass` 
4

如果你想只是捕捉STDOUT perl的命令使用,

pass=$(perl /root/bin/randpass) 

但是,如果你需要同时捕获STDERR和STDOUT

pass=$(perl /root/bin/randpass 2>&1) 
+0

你的意思是STDERR? – TLP 2012-02-26 09:12:20

+0

是的,谢谢@TLP – 2012-02-26 09:49:26