私はBSDに書いているいくつかの項目の移植性をテストしています。 Linux、FreeBSD、OpenBSDで動作します。 NetBSDでは動作しません。
以下は、テスト目的でインストールした新しい仮想マシンです。問題をもう一度追跡してみる
NetBSD$ uname -a
NetBSD NetBSD.local 9.1 NetBSD 9.1 (GENERIC) #0: Sun Oct 18 19:24:30 UTC 2020 [email protected]:/usr/src/sys/arch/amd64/compile/GENERIC amd64
NetBSD$ cat /etc/shells
# $NetBSD: shells,v 1.3 1996/12/29 03:23:07 mrg Exp $
#
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.
/bin/sh
/bin/csh
/bin/ksh
/usr/pkg/bin/zsh
/usr/pkg/bin/bash
NetBSD$ for s in /bin/sh /bin/csh /bin/ksh /usr/pkg/bin/zsh /usr/pkg/bin/bash ; do echo $s; $s -c "echo OK" ; done
/bin/sh
/bin/csh
OK
/bin/ksh
/usr/pkg/bin/zsh
OK
/usr/pkg/bin/bash
OK
NetBSD$ su -
Password:
NetBSD# for s in /bin/sh /bin/csh /bin/ksh /usr/pkg/bin/zsh /usr/pkg/bin/bash ; do echo $s; $s -c "echo OK" ; done
/bin/sh
OK
/bin/csh
OK
/bin/ksh
OK
/usr/pkg/bin/zsh
OK
/usr/pkg/bin/bash
OK
ルート以外の場合はなぜ機能しないのですか、ルートの場合は機能するのはなぜですかsh -c "echo OK"
?ksh -c "echo OK"
他のシェル(csh
、、、 )は上記のようにzsh
うまくbash
機能します。
答え1
Kusalanandaのハッシュが私のハッシュと一致し、問題がなかったので、設定をさらに詳しく見ました。私のドットファイルはオペレーティングシステムのバリエーション間で共通であり、そこに問題はありません。しかし、NetBSD shとkshは私がアクセスできる他のシェルとは異なる動作をし、問題は私のドットファイルにあります。
対話型シェルに役立つ機能を定義できるようにENVを定義しています。exit
シェルがインタラクティブでない場合に呼び出しましたが、csh以外のシェルがインタラクティブでないときに何も得られないのを覚えていません。まあ、すべてではありません。 NetBSDのshとkshはそうです。それらは私がそのアクションでテストした唯一のBourneシェルだけでなく、そのアクションでシェルを終了する唯一のシェルですexit
。他のシェル(テスト済み-ic
)はファイル処理を停止し、渡されたコマンドを実行します-c
。