1

我有一个在代码中调用ps -ef某处的 perl 脚本。该脚本适用于 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 脚本中不可用。我怎样才能让脚本看到这个别名?

4

3 回答 3

5

ps_wrapper是一个只有你的 shell 知道的别名,而不是在它下面运行的程序。有很多方法可以在这里完成您要完成的工作:

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

还有一些想法:

  • 在Linux中,PS_PERSONALITY环境变量可以用来设置ps“个性”。
  • 在 Solaris 中,ps遵循 POSIX/XPG/SUS,因此通过坚持命令行的 SUS 语义,ps您可以(理论上)在两个系统上访问相同的命令行和输出。
于 2013-11-08T19:33:36.943 回答
1

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

于 2013-11-08T19:34:27.170 回答
0

如果您bash -ic想使用.bashrc. 例子:

$ grep hello ~/.bashrc
alias hello='echo hello'
$ bash -ic 'hello'
hello
于 2013-11-08T19:35:17.763 回答