linux – 为什么mkdir -p在checkinstall调用的脚本中没有正常工作?

linux – 为什么mkdir -p在checkinstall调用的脚本中没有正常工作?,第1张

概述我正在尝试编译 Quarter并使用 checkinstall打包它. 如果我做标准./configure\u0026 amp ;>制造&& sudo make install,事情顺利. $wget http://ftp.coin3d.org/coin/src/all/Quarter-1.0.0.tar.gz$tar xzf Quarter-1.0.0.tar.gz$cd Quarter-1 我正在尝试编译 Quarter并使用 checkinstall打包它.

如果我做标准./configure\u0026 amp ;>制造&& sudo make install,事情顺利.

$wget http://ftp.coin3d.org/coin/src/all/Quarter-1.0.0.tar.gz$tar xzf Quarter-1.0.0.tar.gz$cd Quarter-1.0.0$./configure$make$sudo make install

但是当我使用checkinstall时,它在mkdir -p上失败,它应该可以正常工作.它失败的方式正是如何没有给出-p选项那样.这是我正在使用的checkinstall命令行:

$checkinstall -D -y --install=no --pkgname=libquarter --pkgversion=1.0.0 \  --arch=i386 --pkglicense=GPL [email protected] --reset-uIDs=yes

这是失败:

..../bin/bash ../../../cfg/mkinstalldirs /usr/local/include/Quarter/devicesmkdir -p -- /usr/local/include/Quarter/devicesmkdir: cannot create directory `/usr/local/include/Quarter': No such file or directorymake[4]: *** [install-libdevicesincheaderS] Error 1....

这是脚本的相关部分:

$cat cfg/mkinstalldirs....case $dirmode in  '')    if mkdir -p -- . 2>/dev/null; then      echo "mkdir -p -- $*"      exec mkdir -p -- "$@"    fi    ;;....

我不明白为什么那个exec在那里 – 不能保证脚本的其余部分(在esac之后)永远不会执行吗? (如果if测试通过,那么脚本假定mkdir -p正常工作,所以一旦它真正的mkdir -p就可以退出;否则脚本的其余部分实现正确的mkdir -p行为.)我也不明白为什么它在echo中使用“$*”而在下一行使用“$@”,但它似乎并不重要 – 它们都是相同的东西,因为这个脚本只用一个参数调用. (汤姆在评论中解释道.)

如果我在echo和exec之间添加两行,它们执行mkdir -p – “$@”然后回显“现在正在执行exec mkdir …”那么它就像这样 – 更好,但仍然令人困惑:

/bin/bash ../../../cfg/mkinstalldirs /usr/local/include/Quarter/devicesmkdir -p -- /usr/local/include/Quarter/devicesmkdir: cannot create directory `/usr/local/include/Quarter': No such file or directoryNow doing the exec mkdir... /usr/bin/install -c -m 644 inputDevice.h /usr/local/include/Quarter/devices/inputDevice.h.... finishes successfully!

现在,两次执行mkdir行使其工作的事实告诉我这不是权限问题(旁边,这将生成与mkdir不同的诊断,并且这是作为sudo运行的,并且它实际上在/ var / tmp /中工作…不是真正的/usr/local / …).我认为发生的事情是第一个mkdir调用(我添加的那个)实际上只创建了Quarter目录并且挽救了,然后当第二个mkdir运行时,它能够创建devices子目录,因为Quarter目录已经存在.但为什么mkdir会这样工作?

我的解决方法是以某种方式修补mkinstalldirs脚本,但我真的很好奇为什么这会破坏!

这是一个在Win7上的VirtualBox中运行的Ubuntu 10.10客户机,通过apt-get安装了checkinstall版本1.6.2.

编辑:
我做了一些测试,看看这个环境中哪些有效,哪些失败…

mkdir -p /foo works correctlymkdir -p /foo && mkdir -p /foo/bar works correctlymkdir -p foo/bar works correctlymkdir /foo/bar Failed as expected (correct)mkdir foo/bar Failed as expected (correct)mkdir -p /foo/bar fails

奇怪的是-p适用于相对路径名但不适用于绝对路径名.或者正确的区别是-p在“chroot”树之外工作(如果它甚至真的使用chroot)但不在其中.

我还验证了尽管失败了,但它能够创建第一个目录级别.

还是个谜.

解决方法 运用
checkinstall --fstrans=no

应该解决这个问题
要么

Set "TRANSLATE=0"

在/ etc / checkinstallrc中再试一次.

总结

以上是内存溢出为你收集整理的linux – 为什么mkdir -p在checkinstall调用的脚本中没有正常工作?全部内容,希望文章能够帮你解决linux – 为什么mkdir -p在checkinstall调用的脚本中没有正常工作?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1039813.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存