VPS 自動補全的問題
我剛剛使用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
超出我的工資等級。