我在 bash / Cygwin 下使用 graphViz,但不知何故,在呼叫它時,bash 選項卡自動完成不會執行任何操作。
範例檔:
myGraph.graphviz
是輸入檔myGraph.graphviz.png
應該是輸出檔。
製作圖形的命令是
dot -T png -o myGraph.graphviz.png myGraph.graphviz
我當然想輸入
點-T png-o 我的Tab.png 我的Tab
自動完成這些檔名,但沒有任何反應!我可以輸入並且它給出了,但為什麼之後不起作用? bash 是否需要為我可以輸入的每個命令提供額外的自動完成模組?cat myTab
cat myGraph.graphviz
dot
答案1
我在 Debian 中建立了範例文件。確實,行不通。然後(手動完成後)也不起作用。有兩個單獨的問題。dot -T png -o myTab
dot -T png -o myGraph.graphviz.png myTab
通用手冊對於 Graphviz 程式指定:
-ooutfile
將輸出寫入文件輸出檔案。 […]
我的 Debian 中的 Bash 補全實際上遵循這一點:它支持,而不是。即使後者可以使用(我不知道這一點),完成也不支援它。你應該像這樣繼續:-ooutfile
-o outfile
dot
點-T png-omyTab
後面沒有任何空格-o
。在我的測試中,上述作品有效。
Tab為了製作我檢查的第二件作品/usr/share/bash-completion/completions/dot
。接近末尾的相關行是:
_filedir dot
這將為您提供要進入的目錄和要指定的文件,但僅限名稱以.dot
或結尾的文件.DOT
。也許你可以手動提供與此模式不匹配的文件,不會發生任何不好的事情,但如果您依賴完成機制,那麼文件名稱應該正確結束。
事實上我dot
根本不知道,我知道一點 Bash 補全。也許這個要求沒有意義,如果允許的話,完成dot
會更有幫助任何文件。在這種情況下,我將原始文件複製到/etc/bash_completion.d/
並修改副本,因此該行
_filedir dot
函數末尾變為
_filedir
這是一個系統範圍的變化。此變更不會影響現有的 shell,因此請啟動一個新的 shellbash
來測試它。如果您無法(或不想)修改,/etc/bash_completion.d/
請參閱這個答案。它提供了一種擁有您的私有(特定於使用者)bash_completion.d/
.
請注意,此變更將允許您鍵入並且完成將起作用。然而,在這種特殊情況下,它與內部無關,它是操作數的一般完成,即使在出現一些意外或無效的選項(例如)之後它也會起作用。dot -T png -o myTab
-o
dot -T png -: myTab
答案2
如果系統上有另一個dot
命令安裝了真正的自動完成定義,並且該命令此時不需要文件,則可能會發生這種情況。預設情況下,對於未知命令,您可以在所有參數上獲得檔案自動完成功能,但特定命令可以設定自己的特定自動完成功能。檢查/etc/bash_completion
和/etc/bash_completion.d/
。
PS:另一種解釋是dot
自動完成腳本與文件不一致,或者您在論點中犯了錯誤。