Bash 软链接和awk脚本(路径问题)
我有Bash 软链接和awk脚本(路径问题),bash,awk,path,symlink,Bash,Awk,Path,Symlink,我有main.sh和external.awk文件 它们在同一个目录中 从main.sh我调用外部awk脚本如下: awk -f external.awk .. 当然,它正在发挥作用 现在当我这样做的时候: cd /usr/local/bin sudo ln -s /path/to/scripts/dir/main.sh main.sh sudo ln -s /path/to/scripts/dir/external.awk external.awk 我可以从我所在的任何目录调用我的main.
main.sh
和external.awk
文件
它们在同一个目录中
从main.sh
我调用外部awk脚本如下:
awk -f external.awk ..
当然,它正在发挥作用
现在当我这样做的时候:
cd /usr/local/bin
sudo ln -s /path/to/scripts/dir/main.sh main.sh
sudo ln -s /path/to/scripts/dir/external.awk external.awk
我可以从我所在的任何目录调用我的main.sh
。
但是它给了我一个错误,就是找不到external.awk
脚本
为什么链接在这种情况下不起作用,不是吗
awk -f external.awk ..
相对于它所在的文件夹调用external.awk
,因此在本例中调用
/usr/local/bin
路径中的符号链接
编辑
发布我的问题后不久,我发现这是处理这种情况的一个好方法:
它不符合POSIX,但在这种情况下,它对我来说并不重要。修改main.sh以调用awk,如下所示:
awk -f /usr/local/bin/external.awk ..
不,它将尝试从当前目录调用AWK脚本,而不是从shell脚本所在的目录调用。请参阅,例如,找到一种解决方法。是否有一种方法可以设置
路径
,以便以这种方式找到外部.awk
?它适用于shell脚本,因为shell使用$path
查找要运行的程序。它不适用于awk
,因为-f
的参数是指向脚本文件的路径名。当您在同一目录中时,external.awk
是当前目录中的文件名。当您在其他地方时,-f external.awk
仍然指定/external.awk
,但该文件不存在。如果您有一个脚本pathfile
,它在路径上查找文件,则可以使用awk-f$(pathfile external.awk).
为您定位文件。如果你没有这样的脚本,你可以写一个。@JoachimPileborg我认为这可能是解决这个问题的更好、更干净的方法。它显然适用于gawk
,但这正是我正在使用的。+1用于发现和记录GNUawk
的AWKLIBPATH。它正是您想要的,如果您总是使用GNUawk
,那么使用它是有意义的。