从https://unix.stackexchange.com/a/276611/674
当
bash
使用 运行时-c
,它被视为非交互式 shell,并且不会读取~/.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
shell是bash -i -c <command>
交互式创建的还是非交互式创建的?
这样的 shell 不接受来自 stdin 的命令,不是吗?所以它不是交互式的,是吗?
这样的 shell 读取~/.bashrc
,所以它不可能是非交互式的,不是吗?
答案1
使用$-
来自Bash 参考手册:
要确定启动脚本中的 Bash 是否以交互方式运行,请测试“-”特殊参数的值。当 shell 是交互式的时它包含 i。
对于这个例子,
$ bash -c 'echo $-' # This is a non-interactive shell
hBc
$ bash -i -c 'echo $-' # This is an interactive shell
himBHc