Hostinger.comでVPSを設定しました。オペレーティングシステムはUbuntu 18.04です。 Mikeのユーザーアカウントを作成しました。オートコンプリート機能がインストールされていないようであることをすぐに理解し、これを実行する方法を見つけました。何らかの理由で(シェルタイプ?)ソースを取得するには、単語を使用する代わりにドットを使用する必要がありますsource
。
Mikeとしてログインして、次のことを行いました。
sudo apt-get install bash-completion
(後で試した問題を解決しようとしていますsudo apt-get install --reinstall bash-completion
。)
.../home/mike/.bashrc に次の行を追加しました。
. /etc/bash_completion
実際、このファイルは1行で構成されています。
. /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
回答の検索中にエイリアスの競合が原因で問題が発生したと推測されます。ただし、エイリアスなしでmikとしてログインすると、問題はまだ存在します。
私は「-su:26」が実際に何を意味するのか理解しようとしています。これは行参照のようです。しかし、ファイルの行26は実際には空です。
今やりたいことは、/usr/share/bash-completion/bash_completionを探して、内容が理解できるまで行をコメントアウトすることです。しかし、それは大きなファイルです!
明らかに興味深い側面の1つは、rootとしてログインすると機能しますが、mikeでログインすると機能しないことです。
〜の後scp
bash_completionファイルを自分のローカルコンピュータからVPSにコピーし、既存のファイルをこのファイルに変更しました(後者を最初に名前変更)。もう一度ルートが正しく機能しているときに購入してください。同様に、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... ]
どんな提案がありますか?何らかの理由でMikeのアカウントが別のシェルを使用している可能性はありますか?他のシェル構文?このような内容はどのように確認できますか?
答え1
(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はPosix互換シェルであるdashを使用するので、実際には標準です。私のアドバイスは、スクリプト、特にサーバー側のスクリプトでダッシュを最大限に使用することです。 Bashは表現力に優れていますが、Dashはより速く実行され、より安全です。(ここ、Rick-777のコメント)
このため、デフォルトで作成されたユーザーアカウントなどの標準アカウントの代わりにHostinger.comroot
アカウントが使用されている理由がわかります。私の給与等級を超えて。bash
dash