NetBSD sh -c "echo OK"가 출력을 제공하지 않습니까? [폐쇄]

NetBSD sh -c "echo OK"가 출력을 제공하지 않습니까? [폐쇄]

나는 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.

관련 정보