我有这个方便的功能,用于显示来自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
命令在当前目录上运行。这最后一次让我感到困惑!
所以,在这里寻找两个答案。
是否有更好的方法来获得ls -la
结果以显示符号链接?
我使用的是OS X(如果不太明显),which
说我的版本是BSD,2006年12月13日。
当man which
不返回任何结果时,使我的助手功能停止的最佳方法是什么?我已经确认这种情况下的返回码为which
,但是简单的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"