gpt4 book ai didi

bash - 检查文件是否可执行

转载 作者:太空宇宙 更新时间:2023-11-04 03:59:56 26 4
gpt4 key购买 nike

我想知道检查程序是否可以用 bash 执行而不执行它的最简单方法是什么?它至少应该检查该文件是否具有执行权限,并且与当前系统具有相同的体系结构(例如,不是 Windows 可执行文件或其他不受支持的体系结构,如果系统是 32 位,则不是 64 位,...)。

最佳答案

看看各种test运算符(这是针对测试命令本身的,但内置的 BASH 和 TCSH 测试或多或少是相同的)。

您会注意到-x FILE表示文件存在并且已授予执行(或搜索)权限

BASH、Bourne、Ksh、Zsh 脚本

if [[ -x "$file" ]]
then
echo "File '$file' is executable"
else
echo "File '$file' is not executable or found"
fi

TCSH 或 CSH 脚本:

if ( -x "$file" ) then
echo "File '$file' is executable"
else
echo "File '$file' is not executable or found"
endif

要确定文件的类型,请尝试 file命令。您可以解析输出以准确查看它是什么类型的文件。 Word 'o警告:有时file会返回多行。以下是我的 Mac 上发生的情况:

$ file /bin/ls    
/bin/ls: Mach-O universal binary with 2 architectures
/bin/ls (for architecture x86_64): Mach-O 64-bit executable x86_64
/bin/ls (for architecture i386): Mach-O executable i386

file 命令根据操作系统返回不同的输出。不过,可执行程序中会出现executable这个词,通常架构也会出现。

将上面的内容与我在 Linux 机器上得到的内容进行比较:

$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), stripped

还有一个 Solaris 盒子:

$ file /bin/ls
/bin/ls: ELF 32-bit MSB executable SPARC Version 1, dynamically linked, stripped

在这三个中,您都会看到“可执行文件”一词和架构(x86-64i386SPARC32 位)。

<小时/>

附录

Thank you very much, that seems the way to go. Before I mark this as my answer, can you please guide me as to what kind of script shell check I would have to perform (ie, what kind of parsing) on 'file' in order to check whether I can execute a program ? If such a test is too difficult to make on a general basis, I would at least like to check whether it's a linux executable or osX (Mach-O)

在我看来,你可以在 BASH 中做这样的事情:

if [ -x "$file" ] && file "$file" | grep -q "Mach-O"
then
echo "This is an executable Mac file"
elif [ -x "$file" ] && file "$file" | grep -q "GNU/Linux"
then
echo "This is an executable Linux File"
elif [ -x "$file" ] && file "$file" | grep q "shell script"
then
echo "This is an executable Shell Script"
elif [ -x "$file" ]
then
echo "This file is merely marked executable, but what type is a mystery"
else
echo "This file isn't even marked as being executable"
fi

基本上,我正在运行测试,如果成功,我会对 file 命令的输出执行 grep 操作。 grep -q 表示不打印任何输出,但使用 grep 的退出代码来查看是否找到了该字符串。如果您的系统不支持 grep -q,您可以尝试 grep "regex">/dev/null 2>&1

同样,file 命令的输出可能因系统而异,因此您必须验证这些命令是否适用于您的系统。另外,我正在检查可执行位。如果一个文件是二进制可执行文件,但可执行位未打开,我会说它不可执行。这可能不是您想要的。

关于bash - 检查文件是否可执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23313031/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com