От lsof FAQ:
17.12.7 Почему делает lsof на моем Солярисе 7, 8 или 9 систем говорят, "не может считать namelist из/dev/ksyms?"
Вы, вероятно, пытаетесь использовать lsof исполняемый файл, созданный для более раннего выпуска Соляриса на Солярисе на 64 бита 7, 8 или 9 ядер. Вывод от
lsof -v
скажет Вам среду сборки Вашего lsof исполняемого файла. Необходимо было также получить предупреждающее сообщение, что lsof компилируется для другой версии Соляриса, чем та, под которой он работает - что-то вроде этого:lsof: WARNING: compiled for Solaris release X; this is Y
Необходимо создать lsof в системе, где Вы хотите использовать его. Для Соляриса на 64 бита 7, 8 и 9 Вам нужен компилятор, который может генерировать исполняемые файлы Соляриса на 64 бита - например, Семинар Sun 5 компиляторов C или позже, или недавняя gcc версия как 3,2.
Это зависит от содержимого скрипта оболочки и используемой оболочки. Сценарий оболочки может содержать код котеля , называемый Shebang, как следующее:
#!/usr/bin/env bash
Специальная последовательность »#! Указывает на систему системного вызова ядра EXEC () для использования программы, определенной сразу после него в качестве переводчика. Это означает, что вам придется посмотреть в файл, чтобы увидеть, какую программу будет использоваться для выполнения ее, если вы используете свой второй стиль выполнения.
Кроме того, из Руководства Bash (Bash -c »Set Commite Set")
-x Print commands and their arguments as they are executed.
Что должна делать ваша команда - если вы используете Bash, см. Примечание ниже - распечатайте каждую строку в вашем скрипте и выполните его. Как ни странно, это должно привести к тому, что ваша первая команда будет медленнее, чем вторая, а не наоборот (снова: если интерпретатор, используемый в обоих случаях, одинаково). Гораздо чаще запустить оболочку без «x », если, конечно, вы хотите сделать отладку.
Нижняя строка: по описанным причинам здесь Используйте Shebang с программой ENV в (как рекомендуется здесь ) и использовать ваш второй стиль выполнения. Это самый независимый платформенный способ сделать вещи и является предпочтительным способом.
Примечание: другое, что усложняет вещи, заключается в том, что фактический переводчик, который находится позади / Bin / Sh, зависит от системы в системе. Во многих случаях это на самом деле Bash, и это то, что я предположил.
Файл ./foobar.sh
запускается с помощью того, что следует за #!
в первой строке. Если в этой строке прочитать #!/bin/sh -x
, то она будет идентична случаю sh -x foobar.sh
(предполагая, что sh разрешен в /bin/sh
из PATH). Может быть, он запускается не sh
, а bash
?
Флаг -x
печатает отладочную информацию, т.е. каждую команду перед ее выполнением.
Первая версия, с явным вызовом на SH
будет запустить ваш скрипт с помощью SH (отображающих операторы трассировки, как запрашивается -x
). Второй, который не указывает явный интерпретатор, будет уважать строку Shebang, если таковые имеются, или по умолчанию для оболочки, которую вы используете в данный момент.
Например, если ваш сценарий имеет линию шебанга #! / bin / bash
, или ваша оболочка - это bash, затем вторая форма ./ Сценарий
приведет к тому, что выполнение для пробега запуска Поскольку Bash является более полнофункциональной оболочкой, чем SH, она может иметь разные характеристики производительности.