Autocomplete

VPS 自動補全的問題

  • December 4, 2019

我剛剛使用hostinger.com 設置了一個VPS。作業系統是 Ubuntu 18.04。我創建了一個使用者帳戶,邁克。我很快意識到自動完成功能顯然沒有安裝,所以查看了你是如何做到這一點的。出於某種原因(外殼類型?)我必須使用點而不是單詞來獲取源source

以 mike 身份登錄,我這樣做了:

sudo apt-get install bash-completion

(NB試圖解決我後來嘗試的問題sudo apt-get install --reinstall bash-completion

…我將此行添加到/home/mike/.bashrc:

. /etc/bash_completion

事實上,這個文件由一行組成:

. /usr/share/bash-completion/bash_completion

目前的情況是,當我以 root 身份登錄時,我可以通過執行以下操作獲得自動完成功能:

$ . /home/mike/.bashrc

但是當以 mike 身份登錄時,相同的命令給出:

$ . /home/mike/.bashrc
-su: 26: /usr/share/bash-completion/bash_completion: Syntax error: "(" unexpected

搜尋答案我推測問題可能是由別名衝突引起的。但是現在以 mike 身份登錄時沒有別名,但問題仍然存在。

我正在嘗試(除其他外)了解“-su:26”的實際含義。這似乎是一個行參考。但該文件的第 26 行實際上是空白的。

我現在想做的是通過/usr/share/bash-completion/bash_completion,註釋掉行,直到事情開始變得有意義。但這是一個大文件!

顯然,其中一個奇怪的方面是它在我以 root 身份登錄時有效,但在以 mike 身份登錄時無效。

後來

scp把我本地機器上的 bash_completion 文件放到了 VPS 上,並用它來替換現有的文件(先重命名後者)。同樣,在 root 工作正常時進行採購。同樣,以 mike 身份登錄時進行採購會產生(幾個)錯誤:

$ . /home/mike/.bashrc
-su: 29: /usr/share/bash-completion/bash_completion: [[: not found
-su: 35: /usr/share/bash-completion/bash_completion: [[: not found
-su: 51: /usr/share/bash-completion/bash_completion: shopt: not found
-su: 57: /usr/share/bash-completion/bash_completion: complete: not found
-su: 62: /usr/share/bash-completion/bash_completion: complete: not found
[... more... ]

有什麼建議麼?可能是邁克帳戶出於某種原因使用了不同的外殼?不同的shell語法?我該如何檢查這種事情?

(以root身份登錄:)

root@vps46990199:~# getent passwd mike
mike:x:1000:1000::/home/mike:/bin/sh
root@vps46990199:~# getent passwd root
root:x:0:0:root:/root:/bin/bash

…稍加搜尋即可找到答案:

root@vps46990199:~# usermod -s /bin/bash mike

… 問題已解決(感謝 ender.qa)

更多資訊

仔細閱讀,我首先驗證它實際上/bin/sh不是文件而是符號連結。根據現代版本的 Ubuntu,這(在我執行之前usermod)連結到/bin/dash,我讀到:

bash 是事實上的標準(使用非常廣泛),但它不是“標準”;Ubuntu 上的 sh 使用 dash,這是一個符合 Posix 的 shell,所以它真的很標準。我的建議是盡可能多地使用破折號來編寫腳本,尤其是伺服器端腳本。儘管 bash 更具表現力,但 dash 執行速度更快且更安全此處,Rick-777 評論)

這讓您想知道為什麼 Hostinger.com 的root帳戶使用預設創建的使用者帳戶bash而不是標準帳戶。dash超出我的工資等級。

引用自:https://unix.stackexchange.com/questions/555041