在我的項目中,我們有一個shell腳本爲某些環境變量設置默認值。當我嘗試運行rinari-console
時,由於該腳本未找到源,因此收到錯誤消息。有沒有辦法確保rinari能夠獲取它,這樣當rails控制檯啓動時,所有變量都具有所需的值?如何在啓動rinari控制檯之前獲取此shell腳本?
回答
好吧,我已經thinkg這個問題有點困難。通過包裝
該解決方案是一個有點笨拙
外Emacs的,但它應該工作:我想到了兩個可能的解決方案。
您可以創建一個包裝腳本,例如'emacs-wrapper.sh':
#!/bin/sh
set -a
. YOUR-SCRIPT.sh
emacs
如果啓動./emacs-wrapper.sh,YOUR-SCRIPT.sh將採購和Emacs之後開始的。這樣Emacs就可以看到相同的環境。測試我的機器上這種方法,我能夠(getenv的「VAR」)在YOUR-SCRIPT.sh
一些好的定義所有變量:通過shell命令在Emcas
這是IMO更加美好因爲它完全在Emacs內部運行。打電話給shell-command-to-string來源你的YOURSCRIPT.sh。最後它還會轉儲過程的環境。隨後將其添加到Emacs自己的過程環境中:
;; defadvice is optional, you could also just call source-script directly
(defadvice rinari-console (before init-environment activate)
(source-script "/PATH/TO/YOUR-SCRIPT.sh"))
(defun source-script (script)
(let ((env (extract-environment script)))
(mapc 'import-environment-variable (split-string env "\n"))))
(defun extract-environment (script)
(shell-command-to-string (format "set -a; . %s > /dev/null 2>&1; env" script)))
(defun import-environment-variable (variable-assignment)
(when (not (or (null variable-assignment) (string= "" variable-assignment)))
(let* ((key-value-pair (split-string variable-assignment "="))
(key (car key-value-pair))
(value (cadr key-value-pair)))
(setenv key value))))
我在我的機器上也驗證了這種方法。所有在YOUR-SCRIPT中定義的變量也在Emacs中定義。
我不使用rinari所以有可能是更好的方式來做到這一點,但在原則上,你可以做到這一點運行實際rinari控制檯命令之前運行「YOUR-SCRIPT.sh」。
(defadvice rinari-console (before run-my-script activate)
(shell-command "YOUR-SCRIPT.sh"))
參見:http://www.gnu.org/software/emacs/manual/html_node/elisp/Advising-Functions.html
我能夠做到你想要用的包裝是什麼。 假設您在~/test
中創建了一個rails項目。 Rinari將通過執行命令~/test/script/console
嘗試啓動irb
。 我創建了一個名爲~/test/script/console.sh
包裝:
#!/bin/sh
. ~/test/script/env.sh
~/test/script/console
包含環境變量,然後你的腳本包裝源執行常規命令。
文件~/test/script/env.sh
包含:
export TEST=test
我們使用的包裝,調用rinari-mode
用一個前綴參數C-u M-x rinari-mode
並添加.sh
所提出的命令結束。環境變量TEST
將被設置。
然後,您可以創建一個自動添加.sh
的宏。
由於某種原因,這個解決方案會導致我的Ubuntu凍結:) – Geo 2012-08-07 06:30:37
以我給出的例子或與您的腳本。如果是腳本,請將其複製到某個地方以查看發生了什麼。 – 2012-08-07 11:56:19
- 1. 在前臺啓動進程時獲取Shell腳本中的進程ID
- 2. 〜/啓動時IRB或腳本/控制檯
- 3. 如何在獲取Ruby之後覆蓋當前控制檯行?
- 4. shell腳本登錄控制檯
- 5. Shell腳本隱藏控制檯消息?
- 6. Linux - 在其他驅動程序啓動之前獲取Shell到
- 7. 在啓動Firebug控制檯之前自動執行javascript行
- 8. 如何使M-P和M-n在rinari控制檯上工作
- 9. 如何在TWebbrowser中獲取JS腳本控制檯輸出?
- 10. 如何在python shell啓動後和customuer輸入之前執行腳本?
- 11. 如何在啓動應用程序之前運行Windows Shell腳本?
- 12. 在用戶登錄之前啓動控制檯應用程序
- 13. 在啓動腳本之前顯示loads.gif
- 14. 如何獲取當前控制檯背景和文本顏色?
- 15. 如何控制shell腳本中後臺作業的數量
- 16. 如何用QProcess啓動Shell腳本?
- 17. 如何啓動MySQL的shell腳本
- 18. shell腳本envsetup.sh如何執行啓動?
- 19. 如何運行本身啓動兩個後臺進程的後臺shell腳本?
- 20. 如何控制Shell腳本的輸入?
- 21. 如何使用腳本控制python shell
- 22. 如何在前臺從Python腳本啓動外部程序?
- 23. 如何在每個Rails控制檯調用之前運行腳本?
- 24. 啓動後臺進程從shell腳本,然後帶回前臺後
- 25. 從bash在控制檯中啓動perl腳本
- 26. 啓動腳本在後臺
- 27. 在控制檯啓動
- 28. 從shell腳本啓動GDB
- 29. shell腳本啓動乘客
- 30. 從shell腳本啓動putty
你的方法很棒!謝謝! – Geo 2012-08-08 20:46:40