Мне интересно, что самый простой способ проверить, является ли программа исполняемой с помощью bash, без ее выполнения? Он должен по крайней мере проверить, имеет ли файл права выполнения и имеет одну и ту же архитектуру (например, не исполняемый файл Windows или другую неподдерживаемую архитектуру, а не 64 бита, если система 32 бита, ...) в качестве текущей системы.проверить, является ли файл исполняемым
ответ
Посмотрите на различные операторы test (это для самой тестовой команды, но встроенные тесты BASH и TCSH более или менее одинаковы).
Вы заметите, что -x FILE
говорит, ФАЙЛ существует и разрешение на выполнение (или поиск) предоставляется.
BASH, Bourne, КШ, Zsh Script
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
Во всех трех, вы увидите слово executable
и архитектуру (x86-64
, i386
, или SPARC
с 32-bit
).
Добавление
Большое спасибо, что кажется путь. Прежде чем отметить это как свой ответ, не могли бы вы посоветовать мне, какую проверку оболочки скрипта мне нужно выполнить (например, какой синтаксический анализ) на «файл», чтобы проверить, могу ли я выполнить программу? Если такой тест слишком трудно сделать на общей основе, я бы по крайней мере, хотел, чтобы проверить, является ли это Linux исполняемый файл или OSX (Mach-O)
Off верхней части моей головы, вы могли бы сделать что-то как это в 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
в принципе, я бегу тест, а затем, если это успешно, я делаю Grep на выходе команды file
. Значения grep -q
не печатают никакого вывода, но используйте код выхода grep, чтобы узнать, нашел ли я строку. Если ваша система не принимает grep -q
, вы можете попробовать grep "regex" > /dev/null 2>&1
.
Опять же, вывод команды file
может отличаться от системы к системе, поэтому вам нужно будет убедиться, что они будут работать в вашей системе. Кроме того, я проверяю исполняемый бит. Если файл является двоичным исполняемым файлом, но исполняемый бит не включен, я скажу, что он не является исполняемым. Возможно, это не то, что вы хотите.
У Bourne shell есть '[[' или просто '['? –
@glennjackman У оболочки Bourne есть '[', которая на самом деле является внешней командой, а не встроенной оболочкой. Обычно он находится в каталоге '/ bin'. Это псевдоним команды 'test'. –
Большое спасибо, это похоже на путь. Прежде чем отметить это как свой ответ, не могли бы вы посоветовать мне, какую проверку оболочки скрипта мне нужно выполнить (например, какой синтаксический анализ) на «файл», чтобы проверить, могу ли я выполнить программу? Если такой тест слишком сложно сделать на общем основании, я бы по крайней мере хотел проверить, является ли это исполняемым файлом linux или osX (Mach-O). – bob
Похоже, что никто не заметил, что -x
Оператор не отличается файлом с каталогом.
Так точно проверить исполняемый файл, вы можете использовать [[ -f SomeFile && -x SomeFile ]]
кажется Также никто не заметил -x оператор на симлинках. Символьная ссылка (цепочка) на обычный файл (не классифицируется как исполняемый файл) не проходит тест.
- 1. Как проверить, является ли файл исполняемым в node.js?
- 2. Как проверить, является ли файл исполняемым, используя ANSI C?
- 3. Реализация оболочки Unix в C: проверить, является ли файл исполняемым
- 4. Как проверить, является ли файл исполняемым в Lua?
- 5. проверить, является ли результат из команды оболочки исполняемым файлом офиса
- 6. проверить, является ли файл изображением
- 7. Является ли .apk исполняемым или пакетом?
- 8. Как найти, является ли файл исполняемым в node.js
- 9. скомпилированный файл C не является исполняемым
- 10. File.canExecute() говорит, что каждый файл является исполняемым?
- 11. Почему исполняемый файл не является исполняемым?
- 12. доступ (2) vs stat (2), чтобы проверить, является ли файл исполняемым
- 13. Является ли Java-модельный язык исполняемым?
- 14. Является ли исполняемым файлом сборки C#?
- 15. QMAKE не является исполняемым
- 16. Проверьте, является ли флеш-ролик исполняемым или встроенным
- 17. создание .so также является исполняемым
- 18. существует Как проверить, является ли файл
- 19. Как проверить, является ли файл DLL?
- 20. необходимо проверить, является ли файл действительным APK
- 21. Как проверить, является ли файл текстовым?
- 22. Как проверить, является ли файл файлом .gz
- 23. проверить, является ли файл аудиофайлом в PHP
- 24. Как проверить, является ли файл изображением
- 25. Как проверить, является ли файл двоичным?
- 26. PHP проверить, является ли файл изображением
- 27. Как проверить, является ли загруженный файл php?
- 28. PHP - проверить, является ли файл EOF
- 29. Как проверить, является ли файл xlsx действительным?
- 30. clearcanvas проверить, является ли файл dicomdir
Я думаю, что либо ls -la [имя_файла], либо stat [имя_файла] – ControlAltDel
Ни ls -la, ни stat не предоставляют информацию об поддерживаемой архитектуре, которая на самом деле является частью вопроса, который меня больше всего интересует. ошибка, потому что исполняемый файл не был скомпилирован для моей архитектуры, и я хотел бы создать сценарий, чтобы избежать этого в будущем. – bob
@bob: Вы пробовали проверять вывод «файла» на эти файлы? – FatalError