如何遵循符号链接的输出?

时间:2018-07-27 15:42:57

标签: bash command-line-interface ls

我有这个方便的功能,用于显示来自console命令的符号链接。

which

它非常适合从路径进行符号链接的事物,例如python。

function whichl() {
    ls -la $(which -a $@)
}

$ whichl python -rwxr-xr-x 1 root wheel 66880 Mar 27 23:02 /usr/bin/python lrwxr-xr-x 1 me admin 43 Dec 19 2017 /usr/local/bin/python -> /usr/local/Cellar/python/2.7.14/bin/python2 $ ls -la $(which -a python3) lrwxr-xr-x 1 me admin 34 Jun 8 10:42 /usr/local/bin/python3 -> ../Cellar/python/3.6.5/bin/python3 找不到任何东西时,它的工作效果就不太好。 which命令在当前目录上运行。这最后一次让我感到困惑!

所以,在这里寻找两个答案。

  1. 是否有更好的方法来获得ls -la结果以显示符号链接?
    我使用的是OS X(如果不太明显),which说我的版本是BSD,2006年12月13日。

  2. man which不返回任何结果时,使我的助手功能停止的最佳方法是什么?我已经确认这种情况下的返回码为which,但是简单的1不会改变行为。

1 个答案:

答案 0 :(得分:0)

正如我在问题中提到的那样,这不起作用:

function whichl() {
    set -e
    ls -la $(which -a $@)
}

评论中的解释:

  

您在当前外壳程序(运行函数的位置)中调用set -e,但在子外壳程序中执行(由于$(...))。您可以将$(哪个-a $ @)产生的值存储在变量中,并仅在不为空时运行ls -la。

遵循该建议,这就是我的想法。

function whichl() {
    RESULT=$(which -a $@)
    if [ -z "$RESULT" ]; then
        echo "No results for \"$@\""
        return 1
    fi
    ls -la -- ${RESULT}
}

从我现在可以测试的所有方面来看,它都很完美!

$ whichl python python3
-rwxr-xr-x  1 root  wheel  66880 Mar 27 23:02 /usr/bin/python
lrwxr-xr-x  1 me    admin     43 Dec 19  2017 /usr/local/bin/python -> /usr/local/Cellar/python/2.7.14/bin/python2
lrwxr-xr-x  1 me    admin     34 Jun  8 10:42 /usr/local/bin/python3 -> ../Cellar/python/3.6.5/bin/python3

请注意,它会从2个输入(系统python和酿造python)中返回3个结果。

$ whichl foo bar
No results for "foo bar"