Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 25 Oct 2025 10:44:29 +0900
From:      Tomoaki AOKI <junchoon@dec.sakura.ne.jp>
To:        "Yamada,Kazuo" <yamada@yamarail.net>
Cc:        freebsd-users-jp@FreeBSD.org
Subject:   Re: root =?UTF-8?B?44Gu?= shell =?UTF-8?B?44Gr44Gk44GE44Gm?=
Message-ID:  <20251025104429.6ff3bb2f5991b3ae8b25fd15@dec.sakura.ne.jp>
In-Reply-To: <20251025094603.310B.5C005573@yamarail.net>
References:  <20251025094603.310B.5C005573@yamarail.net>

next in thread | previous in thread | raw e-mail | index | archive | help

On Sat, 25 Oct 2025 09:46:14 +0900
"Yamada,Kazuo" <yamada@yamarail.net> wrote:

> やまだ@越谷です。
> 
> 20年くらい前に、このMLに投稿して。
> 以後ROM専門でした。
> 
> Facebook の FreeBSDのグループでも質問したのですが。
> コメントが全くないので...
> 
> FreeBSD 13.x から 14.x にアップグレードしたのですが。
> root の シェル が標準では /bin/csh から /bin/sh に変更されているようです。
> 
> アップグレード中に、パスワードファイルの編集画面になり。
> 選択をする必要があったので、/bin/sh は基本使う事ないので。(使うなら bash 使
> う)
> /bin/csh の方にしたのですが。
> 
> どちらにするのが正解なんでしょうか?
> 
> -- 
> 0----+----1----+----2----+----3----+----4----+----5----+----6----+----7----#
>       山田  和雄     MailTo:yamada@yamarail.net
>       Yamada Kazuo

青木@名古屋です。

基本的に、正解は「baseにある(portsでない)ものならお好きなものを」
です。 ただ、今後Handbook等で操作例が掲載されるのはデフォルトの
/bin/shになっていく(または/bin/cshの例が消されていく)可能性が
高いと思いますので、内部コマンドの違いに混乱しそうなら/bin/shに
変えるのも「あり」ではあります。

問題としては、20年前と比べると飛躍的に改善されたとはいえ、/bin/shの
コマンドラインヒストリー周り等は未だ/bin/cshに及ばないので、一応
実用に近づいたとはいえストレスを感じる場面があるかと。

なお、釈迦に説法でしょうけれど、スクリプトを組む場合はPOSIXのshで
必須になって「いない」機能は使わないのが無難ですので、/bin/shの
方を使うのが正解(cshは文法からして違いますので...)ですから
csh自体の設定ファイル群にだけcshを使用しましょう。

また、先に「baseにある(portsでない)ものなら」という縛りを
入れたのは、私の知る限り(あれば)STATICオプションを付けて
ビルドしたとしても/usr/local/bin/以下にインストールされ、
STATICオプション無効(または存在しない)場合に至っては
/usr/local/lib以下のライブラリに依存する場合すらあるので、
仮に/usr/local/を独立したパーティションにしていると何らかの
原因でマウントに失敗したら詰んでしまうこと、base側での
何らかの変更でportsから入れたものに障害が出る場合、対象に
含まれてしまう恐れがある(portsにあるシェル全てがテストして
もらえるわけではありません)ため、これもまた詰むことがある
からです。

なお、私はrootのシェルをzshにしていますが、FreeBSD自体は
(t)cshだと思いこんでいます。 というのは、/etc/master.passwd
では/bin/cshにしてあって、/root/.tcshrc.mineに

if ( -X zsh && -f ~/.Use_zsh ) exec zsh

の1行を入れてあり、/root/.Use_zshという空のファイルを作っておく
ことで、パスの通ったところに実行可能な(attributeの付いた)zshが
存在し、なおかつ/root/.Use_zshが存在することでzshに乗っ取らせる
ようにしているのです。 portsで更新したzshに不備があった場合以外は
これでzshが見つからなくても(t)cshのまま使えます。

※zshに問題が出ている場合、シングルユーザに落ちて/root/.Use_zshを
 消してしまえばいいので、セーフティネットが効きます。

ご参考になれば。

-- 
青木 知明  [Tomoaki AOKI]    <junchoon@dec.sakura.ne.jp>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20251025104429.6ff3bb2f5991b3ae8b25fd15>