Действительно ли возможно кэшировать внешний двоичный файл в сценарии оболочки?

Я думаю, что частью проблемы является то, как вы определили свои переменные. Вместо того, чтобы писать это:

MAIN_DIR=/home/ec2-user/dir/
LAST_DIR=$(ls -d -t ${MAIN_DIR}*/ | head -1)

Я бы рекомендовал вам опустить завершающие / из MAIN _ DIR и использовать его там, где это необходимо:

MAIN_DIR=/home/ec2-user/dir
LAST_DIR=$(ls -d -t ${MAIN_DIR}/*/ | head -1)

Это, я подозреваю, может помочь вам определить, что происходит. Не видя, что находится внутри dir и bitcoin , я не могу предложить ничего более конкретного.

В качестве проблемы стиля, я бы также настоятельно рекомендовал вам цитировать переменные (и их значения), чтобы неожиданные места в значениях не нарушали ваш код:

MAIN_DIR='/home/ec2-user/dir'
LAST_DIR=$(ls -d -t "${MAIN_DIR}"/*/ | head -1)
-121--229959-

Разумно ожидать, что PlayOnLinux будет немного тяжелее собственного. PlayOnLinux полагается на вино, что приводит к целому уровню накладных расходов на виртуализацию.

Steam on otherhand - это скорее захватная сумка некоторых нативных игр и некоторых игр с винной оберткой, поэтому некоторые будут работать более гладко, чем другие, в зависимости от того, кто/как он был портирован.

Кроме того, разница между графическими драйверами opensource и драйверами-инициаторами может вызвать или нарушить игровой процесс.

Это лишь некоторые общие обобщения, некоторые особенности вашей игры/оборудования помогут.

Что такое настройка графического оборудования/драйвера? Если вы не уверены, это может помочь

lspci | grep VGA
-121--209952-

Команда «while» не ищет логического значения, она ищет код возврата «0», который указывает на успешное выполнение команды. В случае команды while команда, возвращающая 0, имеет значение «true», а все остальное - «false».

Даже при выполнении сравнения Баш воспринимает это как команду, которая возвращает успешный код ошибки (0), когда сравнение истинно.

0
13.04.2017, 15:36
2 ответа
[1131082]На практике ядро кэширует исполняемый файл и любой необходимый ему файл (например, библиотеки) в оперативной памяти.

Оболочка ничего не может сделать. Если это внешняя программа, то она должна быть выполнена. Единицы (исключая слои эмуляции unix, такие как Cygwin) обычно делают загрузку программы довольно эффективной, но она никогда не будет такой быстрой, как выполнение встроенной команды.

Вы можете сэкономить время, сгруппировав вызовы на [1131522]touch[1131523]. Во-первых, вы никогда не должны использовать подстановку команд на выходе [1131524]find[1131525]: это не имеет абсолютно никакого преимущества, но имеет несколько недостатков:

Она сломается, если у вас есть имена файлов, содержащие пробелы или глобусные символы.

Это медленнее, потому что сначала [1131870]find[1131871] должен завершить свой обход дерева каталогов, и только после этого начинается обработка.

Он использует больше памяти, чтобы сохранить вывод [1131872]find[1131873].

Вместо того, чтобы накладывать шлейфы на результаты, заставьте [1131532]find[1131533] выполнить команду. [1131534]find[1131535] предназначен для такого использования.

Теперь, поскольку [1131536]touch[1131537] может обрабатывать много файлов за один раз, просто замените [1131538]\;[1131539] на [1131540]+[1131541], и вуаля, [1131542]touch[1131543] будет вызвана в партиях, содержащих как можно больше файлов.

Если вам нужна производительность скрипта оболочки, builtins всегда будет бить внешние команды, если только вы не манипулируете большими объемами данных. Например, использование строковых конструкций оболочки намного быстрее (и менее подвержено ошибкам из-за проблем с цитированием), чем вызов [1131544]sed[1131545], если у вас есть строка текста. С другой стороны, используйте [1131546]sed[1131547] или другие специализированные внешние утилиты, если вам нужно обработать миллионы строк.

Если вы создаете новые файлы, вы можете заменить использование [1131548]touch -- "$file"[1131549] на [1131550]: > "$file"[1131551]. Нет такого ярлыка для изменения даты существующего файла на текущее время.

  1. Shells имеют несколько встроенных команд, которые могут быть реализованы как внешние команды, но являются внутренними для выполнения. Ярким примером является [1131552]echo[1131553]. Также существуют оболочки с дополнительными встроенными функциями для использования в спасательных ситуациях, когда внешние команды могут быть прерваны, или когда таблица процесса заполнена, и т.д. Например, zsh поставляется с модулем
  2. zsh/files[1131875] [1131555] содержит такие команды, как [1131556]mkdir[1131557] и [1131558]mv[1131559], но не [1131560]touch[1131561]. [1131562]Sash[1131563] имеет встроенный [1131564] -touch[1131565].[1131099].
1
28.01.2020, 02:52

Узнайте | xargs[1130945].

0
28.01.2020, 02:52

Теги

Похожие вопросы