如何使用别名修改Perl脚本中使用的系统命令?

时间:2013-11-08 19:27:15

标签: perl shell unix solaris

我有一个perl脚本,在代码中的某处调用ps -ef。此脚本适用于Linux,但不适用于Solaris 5.10。我的工作是在我的.profile中定义一个别名:

ps_wrapper()
{
  if [[ $1 = "-ef" ]]; then 
    /usr/ucb/ps auxwwww
  else
    /usr/ucb/ps $1
  fi
}
alias ps=ps_wrapper

问题是perl脚本中没有别名。如何让脚本看到这个别名?

3 个答案:

答案 0 :(得分:5)

ps_wrapper只是您的shell已知的别名,而不是在其下运行的程序。有很多方法可以做你想在这里完成的事情:

  • 制作ps_wrapper 脚本并将其放在PATH
  • 通过POSIX::uname()检查Perl脚本中的操作系统,并相应地形成ps命令行。
  • 在CPAN中搜索实现便携式ps功能的模块(this one,可能吗?)。

还有一些想法:

  • 在Linux中,PS_PERSONALITY环境变量可用于设置ps“个性。”
  • 在Solaris中,ps遵守POSIX / XPG / SUS,因此通过坚持ps命令行的SUS语义,您可以(理论上)获得相同的命令行并输出两个系统。

答案 1 :(得分:1)

shell别名无法帮助您使用perl脚本。只需将解决方法移到perl脚本中,就可以了。如果您不想在脚本中添加hack,请使用perl模块Proc::ProcessTable之类的东西,它(希望)可以在您的目标平台上运行。

答案 2 :(得分:0)

如果您想使用bash -ic中的别名,可以运行.bashrc。 例如:

$ grep hello ~/.bashrc
alias hello='echo hello'
$ bash -ic 'hello'
hello