究竟什么-x选项在Perl if中意味着什么

时间:2012-08-31 19:39:56

标签: perl if-statement

我不懂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中的确切做法是什么,它是否会将链接视为可执行文件可执行文件?

谢谢!

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

-X  File is executable by real uid/gid