我不知道Perl,所以请耐心等待!这是生成错误的脚本中的一小部分:
if (-x '/usr/bin/gcc') {
$gcc = Fink::Services::enforce_gcc(<<GCC_MSG);
Under CURRENT_SYSTEM, Fink must be bootstrapped or updated with gcc
EXPECTED_GCC, however, you currently have gcc INSTALLED_GCC selected.
This typically is due to alteration of symlinks which were
installed by Xcode. To correct this problem, you will need
to restore the compiler symlinks to the configuration that
Apple provides.
GCC_MSG
$gcc = "-gcc" . $gcc;
}此脚本在Mac上安装fink包管理器。(我不是Mac用户,试图帮助我的朋友安装一个程序,该程序最初是一个GNU程序,需要从源代码编译)。
安装脚本会抱怨GCC的版本不是它期望的版本。我怀疑这就是失败的地方,但我不太明白它在做什么。
我试过创建一个指向已安装的GCC的符号链接,版本是4.2.1,而fink想要的是版本4.2。
如果我将指向GCC的符号链接放到/usr/bin中,就会显示此消息。否则,它会正确识别GCC的版本,并拒绝安装。
我认为-x开关类似于Bash,意味着它正在检查文件是否为可执行文件,但我不确定它在Perl语言中到底做了什么,它会将指向可执行文件的链接视为可执行文件吗?
谢谢!
发布于 2012-09-01 03:51:02
它测试文件是否设置了可执行位。在您的示例中:chmod -x /usr/bin/gcc将导致您的if块无法执行。chmod +x /usr/bin/gcc将提示您的if代码块执行。
发布于 2012-09-01 05:17:35
除了-l和lstat()之外,Perl的文件测试操作符(您可以使用以下命令查看文档: perldoc -f -x)通常遵循符号链接。如果您特别想要测试链接而不是目标,可以首先执行其中一个测试,然后测试-x _;_作为参数使其重用最后的stat结果。
发布于 2012-09-01 04:01:52
-X File is executable by real uid/gidhttps://stackoverflow.com/questions/12221559
复制相似问题