2013-08-23 50 views
0

我在``.bashrc'文件中定義了一些bash函數。在emacs shell模式下,我想使用完整的函數名稱。bash'declare'不能在腳本中使用嗎?

emacs`shell'程序包默認不能完成這些功能,所以我 計劃加強它。

問題是我無法獲得shell的當前函數定義。查詢函數定義的 常用的方法是鍵入:

$ declare -F 

由於「聲明」只是一個內置的命令,我們應當以 腳本文件,把它包起來,然後用'慶典」調用它。用emacs我們可以:

* create a file, wrap the code: 

    -------------- file: get-functions ----------- 

    declare -F 

    -------------- file end ---------------------- 

    * in emacs, eval the expression: 

    (call-process "bash" "get-functions" "output-buffer") 

但是,我在`output-buffer'中什麼都沒有。有趣的是,如果我 在一個真正的shell中運行該腳本:

$ bash get-functions 

我還是什麼也沒得到輸出。

這是否意味着我們不能在腳本中使用`declare -F'?

順便說一句,如果我們刪除腳本文件中的「F」選項,這時我們可以 得到輸出時調用「慶典得到函數」,但我們得到的是不起作用 定義,但所有變量。

我的環境:GNU的bash,版本4.1.2(1)-release(I386-紅帽Linux的GNU的),CentOS的6.3 32位

+0

已經有一個包在shell模式下添加了builtins/aliases/functions等的完成:https://github.com/szermatt/emacs-bash-completion。 –

+0

感謝您的信息。 – xiepan

回答

0

不是一個解決方案呢,只是爲了檢查是否「申報-F 「作品:

(shell) 
(comint-send-string (get-buffer-process "*shell*") "declare -F") 
(comint-send-string (get-buffer-process "*shell*") "\n") 
(switch-to-buffer "*shell*") 
+0

這就像您在低級shell緩衝區中鍵入「declare -F」一樣。 – xiepan

0

從我的頭頂我猜,這與功能未被導出(和bash目前不能導出函數)有關。換句話說:你必須找到你的函數。

......有可能你可以通過使用登錄shell來解決這個問題,但是關於蝙蝠採購對我來說似乎更容易。

+0

這些函數被寫入登錄shell的rc文件中。這意味着這些功能已經來源。 – xiepan

+0

顯然他們不是來源 - 他們不是繼承:) 你可以嘗試添加一個簡單的'。 〜/ .bashrc'放在腳本的頂部。 – bryn