在游侠中,你可以点击S
跳入炮弹并ctrl+D
回到游侠身边。
当我已经在 shell 中一段时间并且我想跳到 Ranger 时,我不确定这是否是一个普通的 shell,我应该点击,ranger
或者如果我已经通过 Ranger 在 shell 中,我应该点击ctrl+D
。
如果我打错ctrl+D
了,我的终端就会关闭。如果我使用ranger
错误,我会在 Ranger 中得到 Ranger 的嵌套实例。
有没有办法检查我是否已经处于游侠外壳中?
如果有一个命令,我可以将其别名为类似的命令,rangerp
如果我在 shell 中,则输出“True”,如果不在 shell 中,则输出“False”。
答案1
每当 Ranger 生成 shell 时,它都会增加环境变量RANGER_LEVEL
:
$ echo $RANGER_LEVEL
$ ranger # Open Ranger and enter a nested shell
$ echo $RANGER_LEVEL
1
$ ranger # Do the same thing from the nested shell
$ echo $RANGER_LEVEL
2
对于您请求的命令,您可以执行以下操作:
alias inranger="[ $RANGER_LEVEL ] && echo True || echo False"
如果您不想浪费时间运行该命令或希望确保不会忘记运行它,则可以通过编辑 shell 的 RC 文件将所需信息添加到提示符中:
if [ -n "$RANGER_LEVEL" ]; then
export PS1="[r$RANGER_LEVEL]$PS1";
fi
就这样:
$ ranger # Open Ranger and drop into a shell
[r1]$ ranger # One more time
[r2]$ # ...
答案2
查看父进程 pid 对此有所帮助。
[root@centos8 ranger-1.9.3]# ps -fp $PPID
UID PID PPID C STIME TTY TIME CMD
root 3240 3214 0 08:03 pts/1 00:00:00 /usr/bin/python3 -O /usr/local/bin/ranger
[root@centos8 ranger-1.9.3]#
所以尝试一下
ps -fp $PPID | grep -q ranger && echo True || echo False
答案3
使用鱼壳修复
创建文件〜/.config/fish/functions/ranger.fish包含以下内容:
function ranger --description 'Simple, vim-like file manager'
if test -n "$RANGER_LEVEL"
exit
else
command ranger $argv
end
end