Re: root の shell について

From: <iscream_at_nugae.org>
Date: Sun, 02 Nov 2025 16:47:49 UTC
西村です

> On Sat, 25 Oct 2025 09:46:14 +0900
> "Yamada,Kazuo" <yamada@yamarail.net> wrote:
> 
> > やまだ@越谷です。
:
> > FreeBSD 13.x から 14.x にアップグレードしたのですが。
> > root の シェル が標準では /bin/csh から /bin/sh に変更されているようです。
:
> 青木@名古屋です。
:
> なお、私は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のまま使えます。

私も/bin/shがデフォルトになったあたりで
/bin/shをデフォルトにしたうえで

~/.profile の最後の方に
if [ -t 0 ] && case "$-" in *i*) true;; *) false;; esac && [ ${_SHELL_SWITCHED:-0} -ne $$ ]; then
    export _SHELL_SWITCHED=$$
#   command -v bash >/dev/null 2>&1 && bash -c 'exit 0' >/dev/null 2>&1 && exec bash
    command -v csh  >/dev/null 2>&1 && csh  -c 'exit 0' >/dev/null 2>&1 && exec csh
    echo "No usable alternate shell found, staying in sh"
fi

として有ります
任意のシェルを、存在チェックと動作チェックをしたうえで、対話シェルとしてログインするときだけスイッチします
非対話シェルの場合はそのまま/bin/shを使うと

バッチ処理を非対話シェルで流し込んだ際に、回線切断時にプロセスが残るのがうっとうしいのでshを使いたいのですが
(ssh経由でtail -F でログファイルをリモートから転送して、受け取り側で処理してると、コネクションが切れたときにcshだとtailが残ることがあるので…)
対話シェルで使ってる時は、セッション切断時に sh だとバックグラウンドタスクを殺されるのが嫌ってことでこうしてあります

cshが起動できないことはないとは思うのですが
念のためにこうしてあります

-- 
NISHIMURA Yutaka <iscream@nugae.org>