2

我不知道 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 中到底做了什么,它会将指向可执行文件的链接视为可执行文件吗?

谢谢!

4

3 回答 3

4

它测试文件是否设置了可执行位。在您的情况下:chmod -x /usr/bin/gcc将导致您的if块不执行。 chmod +x /usr/bin/gcc将导致您的if块被执行。

于 2012-08-31T19:51:01.623 回答
1

Perl 的文件测试操作符(您可以使用命令查看文档:perldoc -f -x)通常遵循符号链接,除了-land lstat()。如果你特别想测试链接而不是目标,你可以先做一个,然后测试-x __作为参数使其重用最后的统计结果。

于 2012-08-31T21:17:35.360 回答
0
-X  File is executable by real uid/gid
于 2012-08-31T20:01:51.683 回答