我有一个脚本可以同时打开不同的文件。
我的问题是,当我在 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/