我需要從ruby應用程序運行shell命令。我正在使用system()
,但這也適用於反引號。紅寶石子殼中的「源」
當運行我的命令,我需要先裝一個shell腳本,設置了一些事情,所以我嘗試這樣:
system("source my_script.sh && my_command")
在我的Mac筆記本電腦這種按預期工作,但在我的Ubuntu的服務器I得到:
sh: 1: source: not found
我想知道在那裏 「sh」 的,因爲我的外殼應該是一個bash,所以嘗試這樣做:
system("echo $SHELL && source my_script.sh && my_command")
這給了我:
/bin/bash
sh: 1: source: not found
所以,它是使用合適的外殼,但由於某些原因,source
不起作用。
爲什麼?我能做些什麼呢?
更新 正如Sergio Tulentsev指出的那樣,Ruby不一定使用在$ SHELL中設置的shell。
這使我的紅寶石是用實際的外殼:
system("ps -p $$ | tail -1 | awk '{print $NF}'")
sh
=> true
所以,它用sh。我可以以某種方式強制它使用bash?
如果'$ SHELL'被設置爲bash,我認爲這並不意味着ruby會使用它。試試這個技巧來確定實際的shell:http://liquidat.wordpress.com/2007/07/28/short-tip-determine-current-shell/ –
哦,我不知道。但是,是的,它實際上是「sh」。謝謝。 – selfawaresoup
如果'$ SHELL'是'sh',那麼'source'將不能工作,你需要de'。文件。sh'來源 – jbr