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

J.P*_*ong 1 unix shell perl 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
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*off 5

ps_wrapper是仅为shell所知的别名,而不是在其下运行的程序.有很多方法可以完成你想要完成的任务:

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

还有一些想法:

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

  • 相信我,你*不要*想要覆盖系统`ps`二进制文件 - 你会打破比你想要的更多的东西.相反,检查将运行perl脚本的环境/用户使用的实际`PATH`并在前面添加另一个目录(或使用显式`PATH`调用perl脚本)以确保它命中你的`ps`而不是系统之一. (2认同)