通过 Ranger 检查我是否处于 shell 中

通过 Ranger 检查我是否处于 shell 中

在游侠中,你可以点击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]$        # ...

来源:https://github.com/ranger/ranger/issues/1374

答案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

相关内容