perl - 如何让 Perl 运行我在 BASH 中定义的别名?

标签 perl bash alias

我有一个脚本可以同时打开不同的文件。

我的问题是,当我在 bash 中定义的指向/home/user1/Software/nc 的别名上运行 system() 时,perl 告诉我它无法执行别名,因为没有当前位置的文件/目录。 我知道别名有效,因为当我在 shell 中直接调用它时,它可以正常打开。

有趣的是,我可以在我的脚本中执行 system("firefox"),但别名不行。如何在此脚本中使用此别名而不破坏它?

最佳答案

Perl 不会运行 bash,它会直接执行命令。你可以打电话

bash -c your_command

而不是在 Perl 中调用命令本身。

实际上,这不会加载您的别名。您需要打开一个交互式 shell,如@MortezaLSC 的回答所示。据说有一种方法可以在非交互式 shell 中正确加载别名,但我无法弄清楚。

但是你为什么不直接在 perl 中使用你别名化的命令呢?我认为不这样做的唯一原因是,如果您的别名将来会发生变化,但您仍然希望运行它指向的任何命令。至少可以说,这看起来很奇怪而且很危险。

如果您始终调用具有相同选项等的命令,别名旨在减少您的输入。它们不是 bash 的通用宏。 Bash 具有执行更复杂操作的函数,但为什么要从 perl 脚本调用非平凡的 bash 代码?看来您在这里真的不需要这个。将复杂性以及修改和失败的可能性放在一个地方(perl 脚本)。

查看类似问题的几个答案:

关于perl - 如何让 Perl 运行我在 BASH 中定义的别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21823349/

相关文章:

mysql - Perl DBIx::Class 截断表

perl - 在 Perl 中将 Unix 时间戳转换为可读日期

MySQL IF THEN AS 语法

perl - 如何在 Moose 中使用 ArrayRef[Class]

bash - 使用 nc 传输文件时的空文件

bash 每 10 分钟创建一个文件

linux - 如何在 Linux Bash 中获取命令输出的一部分?

ruby 1.8.6 : How to alias a constant in one class to a class method in another?

apache - 将 apache 设置为 nodejs 应用程序的别名?

perl - 如何使用 Perl 6 运行外部程序? (例如 Perl 5 中的 "system")