[英]How do I get Perl to run an alias I've defined in BASH?
我有一個腳本,可以同時打開不同的文件。
我的問題是,當我在bash中定義的別名上運行system()時指向/ home / user1 / Software / nc,perl告訴我它不能執行別名,因為沒有文件/目錄在當前位置。 我知道別名有效,因為當我直接在shell中調用它時,它打開很好。
有趣的是,我可以在我的腳本中做系統(“firefox”),但不是別名。 如何在不破壞此腳本的情況下使用此別名?
Perl不會運行bash,它會直接執行命令。 你可以打電話
bash -c your_command
而不是在Perl中調用命令本身。
實際上,這不會加載您的別名。 您需要打開一個交互式shell,如@ MortezaLSC的答案。 據說有一種方法可以在非交互式shell中正確加載別名,但我無法弄明白。
但是你為什么不直接在perl中使用別名的命令呢? 我可以看到不這樣做的唯一原因是,如果您的別名將來會發生變化,但您仍然希望運行它指向的任何命令。 至少可以說這看起來很怪異和危險。
別名旨在減少您在使用相同選項等始終調用命令時所執行的鍵入操作。 它們不是用於bash的通用宏。 Bash具有執行更復雜內容的功能,但是為什么要從perl腳本中調用非平凡的bash代碼呢? 看起來你真的不需要這個。 在一個地方(perl腳本)保持復雜性,以及修改和失敗的可能性。
查看類似問題的幾個答案:
如果你很聰明,你就做了它,所以你的別名只是為交互式shell定義的,所以你必須啟動bash
並指定你想要一個使用-i
的交互式shell。
system('bash', '-i', '-c', 'shell command');
它有效嗎?
system 'bash -i -c "your alias parameter"';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.