Igu*_*aut 8 bash cd-command libtool
尝试安装我构建的软件包时,从 libtool 得到这个非常奇怪的错误。它src/api
在源代码树的子目录 ( ) 中运行时发生:
make[5]: Leaving directory '/users/galac/embray/src/slurm/src/api'
/bin/mkdir -p '/usr/local/lib'
/bin/bash ../../libtool --mode=install /usr/bin/install -c libslurm.la '/usr/local/lib'
../../libtool: line 929: cd: ../..: Not a directory
Run Code Online (Sandbox Code Playgroud)
的相关部分libtool
如下所示:
914 # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
915 # is ksh but when the shell is invoked as "sh" and the current value of
916 # the _XPG environment variable is not equal to 1 (one), the special
917 # positional parameter $0, within a function call, is the name of the
918 # function.
919 progpath=$0
920
921 # The name of this program.
922 progname=`$ECHO "$progpath" |$SED "$sed_basename"`
923
924 # Make sure we have an absolute progpath for reexecution:
925 case $progpath in
926 [\\/]*|[A-Za-z]:\\*) ;;
927 *[\\/]*)
928 progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
929 progdir=`cd "$progdir" && pwd`
930 progpath=$progdir/$progname
931 ;;
932 *)
933 _G_IFS=$IFS
934 IFS=${PATH_SEPARATOR-:}
935 for progdir in $PATH; do
936 IFS=$_G_IFS
937 test -x "$progdir/$progname" && break
938 done
939 IFS=$_G_IFS
940 test -n "$progdir" || progdir=`pwd`
941 progpath=$progdir/$progname
942 ;;
943 esac
Run Code Online (Sandbox Code Playgroud)
如果我set -x
围绕此部分插入脚本,我会看到以下跟踪:
+ progpath=../../libtool
++ printf '%s\n' ../../libtool
++ /bin/sed 's|^.*/||'
+ progname=libtool
+ case $progpath in
++ printf '%s\n' ../../libtool
++ /bin/sed 's|/[^/]*$||'
+ progdir=../..
++ cd ../..
../../libtool: line 930: cd: ../..: Not a directory
+ progdir=
+ progpath=/libtool
...
Run Code Online (Sandbox Code Playgroud)
这会导致进一步的错误,因为它没有设置自身progpath=../../libtool
的正确路径libtool
(在顶级源目录中)。它似乎也正确设置progdir=../..
。那么为什么../..
不是目录呢?
显然,如果我手动检查它看起来不错:
~/src/slurm/src/api$ ls -ld ../..
drwxr-xr-x 11 xxxxxx xxxxx 4096 May 14 14:52 ../..
Run Code Online (Sandbox Code Playgroud)
它不是符号链接或类似的东西。
在我 20 年的发展中从未见过这样的事情。
Igu*_*aut 14
问题是我在 HPC 系统(我有管理权限)上的 NFS 挂载上。但是运行时出现了错误sudo make install
。
NFS 服务器似乎正在使用该root_squash
选项,这使得 root 用户无法读取 NFS 挂载;见https://linux.die.net/man/5/exports
解决方案是简单地将我的构建移动到非 NFS 文件系统并从那里安装。感谢所有看过的人。