shell是由`bash -i -c创建的` 互动?

shell是由`bash -i -c创建的` 互动?

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

相关内容