我正在编写一个脚本,我需要在用户的$ PATH上查找命令并获取命令的完整路径。问题是我不知道用户的登录shell是什么,或者他们的do文件中可能有什么奇怪的东西。我为我的简单小脚本使用了Bourne shell,因为它需要在一些可能没有bash的较早版本的Solaris平台上运行。
“which”和“whence”的某些实现将获取用户的点文件,并且这对于所有用户来说都不是真正可移植的。我很喜欢一个简单的UNIX实用程序,它只是为可执行文件扫描PATH的基本工作并报告第一个匹配的完整路径。
但我会解决任何对所有用户都稳定的/ bin/sh解决方案。
我正在寻找一个比编写我自己的/ bin/sh循环更好的解决方案,这个循环可以截断$ PATH并一次搜索一行。看起来这很普遍,应该有一种可重用的方式来做到这一点。
我的“漫长的道路”第一近似值是这样的:
IFS=:
for i in $PATH; do
if [ -x $i/$cmd ]; then
echo $i/$cmd
fi
done
有没有更简单的东西和便携式?
你在找什么? – 2011-09-01 23:20:32
你需要担心他们所有的点文件等吗?脚本运行时,用户是否已经在shell中?也就是说,这些文件已经来源了? –
问题是,如果我的.profile只为ksh设置,并且我的sh脚本最终将它作为运行'which'或'whence'命令的一部分来源。我的Solaris 11机箱上的'whence'手册页是指内置的ksh。我正在寻找一种便携式的方式来做到这一点。 –