-1

这是一个 shell 脚本,我如何在 Perl 中完成同样的事情?

prfile=~/sqllib/db2profile

profile()
{
if [ -f $prfile ] && [ "$prfile" != "" ];
then
        . $prfile
else
        read -p "Enter a valid Profile : " prfile
        profile
fi
}
profile

在这里它检查配置文件,如果找到它会执行它,. $prfile否则它会再次询问用户正确的配置文件

更新

#!/usr/bin/perl
use strict;
use warnings;

my $profile = "$ENV{'HOME'}/sqllib/db2proile";
# default profile

while (not -e $profile) { # until we find an existing file
  print "Enter a valid profile: ";
  chomp($profile = <>); # read a new profile
}

qx(. $profile);

这行得通。我希望主目录是动态的而不是硬编码的,因为它们因不同的机器而异。我只是想用 Perl 来完成我用 shell 所取得的成就。

4

1 回答 1

0

如果我了解您的目标,我认为您不能使用 perl 来完成此操作,因为 perl 将作为子进程运行,并且它无法更改 shell 的环境(它是父进程)。也许这对你有用(未经测试,即兴发挥)?

prfile=~/sqllib/db2profile
if [ -s "$prfile" ] ; then
   . "$prfile"
else
  while true ; do 
    read -p "Enter a valid Profile : " prfile
    if [ -s "$prfile" ] ; then
       . "$prfile"
       break;
    fi
  done
fi
于 2013-02-24T17:46:16.103 回答