쉘은 `bash -i -c에 의해 생성됩니다.'상호작용?

쉘은 `bash -i -c에 의해 생성됩니다.'상호작용?

~에서https://unix.stackexchange.com/a/276611/674

bashrun 을 사용 하면 -c비대화형 쉘로 처리되며 지정하지 ~/.bashrc않는 한 읽지 않습니다 -i. 그래서,

$ type cp
cp is aliased to ‘cp -i’          # Defined in  ~/.bashrc

$ cp .file1 file2
cp: overwrite ‘file2’? n

$ bash -c "cp .file1 file2"
                                  # Existing file is overwritten without confirmation!
$ bash -c -i "cp .file1 file2"
cp: overwrite ‘file2’? n

쉘은 bash -i -c <command>대화형으로 생성됩니까, 아니면 비대화형으로 생성됩니까?

그러한 쉘은 stdin의 명령을 받아들이지 않습니다. 그렇죠? 그럼 대화형이 아니죠?

그러한 쉘은 읽기 ~/.bashrc때문에 비대화형일 수 없습니다. 그렇죠?

답변1

사용$-

~에서배쉬 참조 매뉴얼:

시작 스크립트의 Bash가 대화형으로 실행되고 있는지 확인하려면 "-" 특수 매개변수의 값을 테스트하세요. 쉘이 대화형일 때 i가 포함됩니다.

이 예의 경우,

$ bash -c 'echo $-'      # This is a non-interactive shell
hBc

$ bash -i -c 'echo $-'   # This is an interactive shell
himBHc

관련 정보