如何确定我正在使用的当前shell ?
仅仅ps命令的输出就足够了吗?
如何在不同风格的Unix中实现这一点?
如何确定我正在使用的当前shell ?
仅仅ps命令的输出就足够了吗?
如何在不同风格的Unix中实现这一点?
当前回答
我有一个简单的技巧来找到当前的壳。只需输入一个随机字符串(这不是命令)。它将失败并返回一个“not found”错误,但在行开始时,它会说它是哪个shell:
ksh: aaaaa: not found [No such file or directory]
bash: aaaaa: command not found
其他回答
执行以下操作以了解您的shell是否使用Dash/Bash。
ls –la /bin/sh:
如果结果是/bin/sh -> /bin/bash ==>那么你的shell使用的是Bash。 如果结果是/bin/sh ->/bin/dash ==>那么你的shell使用的是dash。
如果你想从Bash更改为Dash或反之亦然,请使用下面的代码:
将shell更改为Bash
注意:如果上述命令导致错误提示/bin/sh已经存在,请删除/bin/sh后重试。
Try
ps -p $$ -oargs=
or
ps -p $$ -ocomm=
这不是一个非常干净的解决方案,但它是你想要的。
# MUST BE SOURCED..
getshell() {
local shell="`ps -p $$ | tail -1 | awk '{print $4}'`"
shells_array=(
# It is important that the shells are listed in descending order of their name length.
pdksh
bash dash mksh
zsh ksh
sh
)
local suited=false
for i in ${shells_array[*]}; do
if ! [ -z `printf $shell | grep $i` ] && ! $suited; then
shell=$i
suited=true
fi
done
echo $shell
}
getshell
现在您可以使用$(getshell)——version。
不过,这只适用于kornshell类shell (ksh)。
我有一个简单的技巧来找到当前的壳。只需输入一个随机字符串(这不是命令)。它将失败并返回一个“not found”错误,但在行开始时,它会说它是哪个shell:
ksh: aaaaa: not found [No such file or directory]
bash: aaaaa: command not found
你可以试试:
ps | grep `echo $$` | awk '{ print $4 }'
Or:
echo $SHELL