2012-07-02 58 views
2

我正在尋找從我的shell腳本中,以檢查腳本完成特定的方法已使用complete -F ...檢查自動完成初始化

我希望這張支票打印出一個建議用戶初始化如何像初始化完成:

Warning: Auto completion is not initialized. Please run : source ....; complete -F ...

的問題是,劇本,在中運行子shell有沒有什麼地方用戶工作之母貝的「完整」的環境信息。

所以complete -p| grep my-script-name永遠不會返回任何結果。

用戶需要手動運行「source」和「complete」命令或將它們添加到他的.bashrc中,因爲我們正在一個服務器上工作,我們無法訪問bash完成系統目錄。

或者,如果您知道從腳本中初始化(而不僅僅是檢查)自動完成的方法,我會高興地接受它。

+1

如果你在這裏沒有得到答案,你可以試試[bash-help](http://lists.gnu.org/archive/html/help-bash/)郵件列表。 –

回答

0

腳本可以訪問父shell的這種信息的唯一方法是,它是否被包含而不是作爲子shell執行。而不是指導你的用戶他們可以包括一些配置,你可以設計你的腳本,以便它運行或包含它。

然後,您可以簡單地通知用戶,如果他們希望完成啓用,他們需要包含腳本,而不是將其作爲可執行腳本運行(使用源代碼或使用instuctions)。

但是,在這種情況下,我會傾向於在文檔中添加此信息或將其添加到始終顯示的橫幅(但可以使用-q選項開關禁用),而不是支持兩種模式運行腳本(因爲增益太小)。

0

要麼你希望每個用戶使用bash完成(我認爲這不是很好,例如我更喜歡關閉它),或者讓用戶自己決定,但讓他們在每個TABTAB上打印出這條消息是一種威脅,你不覺得嗎?

我把/etc/bash.bashrc放到了你認爲每個用戶應該運行的東西。

+0

1)我在問題中指定了我們沒有對系統目錄的寫權限。這是一臺服務器。 2)我不想在TABTAB上發出通知,我想在用戶調用腳本時使用它。我只想告訴他,他可以設置完成,這將幫助他處理腳本.3)用戶確實需要它 - 我需要實施。 – LiMar

+0

感謝您的澄清,我沒有得到(說明有點雜亂)。因此,如果除了自己的用戶以外無法更改任何內容,您希望如何更改所有用戶的完成情況? –

+0

並非所有,而是爲每個:)他/她可以選擇手動運行「source ...」或將此命令插入其私有的.bashrc中。但是,當然,用戶應該意識到這種可能性,我只是想爲他打印一個宣佈。 – LiMar