SSH接続したUbuntuのターミナルで何も表示されない、タブ補完も効かない。

こんにちは:sunny:
フロントエンドエンジニアのみつです。

株式会社HRBrainではアドベントカレンダーに参加していて、本記事は5日目になります！

https://qiita.com/advent-calendar/2023/hrbrain

つい先日のことなんですが、サーバーにSSHで接続していて…

- **ユーザー名が表示されない**
- **加えて、タブ補完も効かない**

問題に一生悩まされていました。

と言っても、/bin/shとなっていたシェルを/bin/bashに変更するだけ、でいつも通りのターミナル環境が再現できたんですが…。

その際に色々調べて学びになったので、その日記です。:heart_eyes:

## 目次
- [コマンドとかLinuxへのぷち理解:bulb:](#コマンドとかlinuxへのぷち理解bulb)
  - [echo](#echo)
  - [chsh](#chsh)
  - [環境変数 PS1](#環境変数-ps1)
- [起きたこと:zap:](#起きたことzap)
- [調査1: 現在の環境変数をチェック](#調査1-現在の環境変数をチェック)
- [調査2: 環境変数を変更してみる](#調査2-環境変数を変更してみる)
- [最終的にやったこと:writing\_hand:](#最終的にやったことwriting_hand)
- [参考URL](#参考url)


## コマンドとかLinuxへのぷち理解:bulb:
### echo
通常のテキストを出力するコマンド。

echo "**$環境変数**"で設定された値を確認できたりにも使用できる。

:::note info
printenvコマンドを使用すれば、設定されている全ての環境変数を確認できます。
:::

```shell
> printenv
USER=okada_m
SHELL=/bin/sh
・・・
```

```shell
> man echo
NAME（名前）
       echo - display a line of text
       
SYNOPSIS（概要）
       echo [SHORT-OPTION]... [STRING]...
       echo LONG-OPTION
       
DESCRIPTION
       Echo the STRING(s) to standard output.

       -n     do not output the trailing newline

       -e     enable interpretation of backslash escapes

       -E     disable interpretation of backslash escapes (default)
...その他
```

### chsh
chsh -sでユーザー自身のログインするシェルを変えるコマンド。

> This determines the name of the user's initial login command. 

```shell
> man chsh
NAME（名前）
       chsh - change login shell
       
SYNOPSIS（概要）
       chsh [options] [LOGIN]  
       
DESCRIPTION（詳細）
       The chsh command changes the user login shell. 
       This determines the name of the user initial login command. 
       A normal user may only change the login shell for her own account; 
       the super ser may change the login shell for any account.
       
OPTIONS（オプション）
       The options which apply to the chsh command are:
       -s, --shell SHELL
           The name of the user new login shell. 
           Setting this field to blank 
           causes the system to select the default login shell.    
...その他
```

### 環境変数 PS1

環境変数を設定するPS1というものがあるのを初めて知りました。

> Bash reads PS1 variable to define the primary prompt and PS2 for a secondary prompt (used when writing multi-line commands)

https://help.ubuntu.com/community/CustomizingBashPrompt
## 起きたこと:zap:
初めてログインした時のターミナルの名前が＄マークのみ。

他のサーバーにSSHで接続する時は、ユーザー名がついたりするはずなのになぁと不思議な気持ちに。
```shell
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux x.xx.x-xxxx-aws x86_64)
$
```
まぁいいかと思って、別のコマンドを叩こうとした時に異変を感じます。

**「タブ補完が効かない」**

ユーザー名がないだけならまだ良いかと思っていたんですが、タブ補完が使えないのは、ちょっと嫌だ。

やっぱりいつも通りのターミナルと何かが違うぞ。と思い初めて調べてみました。

## 調査1: 現在の環境変数をチェック

- 「Ubuntuでタブ補完が効かない」
- 「ターミナルにユーザー名が表示されない」

などを調べていたところ、現在の環境変数を確認するコマンドを発見。

echo "$PS1"

現在の私のPS1は下記のようでした。

＄（ドルマーク）

だけ。笑

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1841912/2a1a2fdd-b09d-a402-d320-3a6ef615f295.png)

## 調査2: 環境変数を変更してみる

もっと調べていると、環境変数を登録できるコマンドも発見。

export PS1="何かしらの値"

使ってみたところ、コマンドの通りなんだろうけど、なんか違う。笑

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1841912/9f48d7ff-a817-27db-c5f2-025b48c415f6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1841912/162de578-fd94-b73d-5a7b-8a446a16baa7.png)

普通に\uとか、\u@\hっていう文字になっちゃってるよ、という・・・。

## 最終的にやったこと:writing_hand:
**使っているシェルを変更**:bulb:することで期待の動作になりました。

よく分からないなぁとなっていた時、echo "$SHELL"をしてみるとどうなるかと知り合いから言われ、shを使っていることを知ります。

```
$ echo "$SHELL"
/bin/sh
```

加えて、下記の様な似た悩みも発見。

> I don't know why there's no username at the $ ...

https://askubuntu.com/questions/388440/why-is-there-no-name-showing-at-the-command-line

```
chsh -s /bin/bash
```

スクリプトを **sh** から **bash** に変更したところ

**user名@ホスト名**がちゃんと表示されるようになりました:relaxed:

ちなみに、/bin/sh では期待通りの変更にならなかったものですが、

```
\u : ユーザー名
\h : ホスト名
\W : 今いるディレクトリ名

export PS1="\u\$"
export PS1="\u@\w\$"
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1841912/1f8ea617-b656-ff4c-4911-a3158c2fb6d7.png)

とかで表示されるユーザー名とかホスト名もいい感じに変更できるみたいでした。

今後この設定を行うことなんてそうそうないんだろうなと思いながら、将来の自分がターミナル真っ白だか真っ黒だかで困った時のためにと思った記事でした。

## 参考URL
https://help.ubuntu.com/community/CustomizingBashPrompt

https://askubuntu.com/questions/388440/why-is-there-no-name-showing-at-the-command-line