Возьмите последнюю выполненную команду из истории в виде строки и сохраните ее в переменной в bash

TL; DR; На Intel/AMD CPUs Вы примерно так же быстры в режиме на 32 бита как в режиме на 64 бита.


Что касается несколько более подробного ответа:

Это зависит от большого количества вещей:

В качестве невыполнение: Вы получите доступ к намного большему адресному пространству. Это - хорошая вещь.

Это адресное пространство используется для большого количества вещей, включая:

  • Отображение устройств IO (например, графический буфер карт, который уже может составить до 6 гибибайт),
  • Физическая память (который вызывает макс. предел RAM на 4 ГиБ, не принимая ГОРОХА),
  • Для виртуальной памяти (отобразите программы, полу случайным образом к этому для безопасности. Так оставьте некоторых ГБ свободный. Другими словами, если у Вас есть 32 бита и некоторый PCI [e] пространство, затем не используйте больше затем 512 МиБ и для RAM и для IO, так, чтобы Вы остались с достаточным адресным пространством для программ карты в и сохранять это полуслучайным для безопасности). См. http://en.wikipedia.org/wiki/ASLR как хорошую начальную точку на рандомизации расположения адресного пространства.

В качестве производительность:

  • Код на 64 бита использует указатели, которые являются дважды размером точек на 32 бита. Это делает программы больше, и Вы заканчиваете с меньшей памятью для других задач, таких как буферы.
  • Для больших программ нужно больше кэша, или Вы получаете уменьшенную эффективность кэша.

На AMD или Intel единственный ЦП:

  • В amd64 режиме Вы получаете дважды количество регистров, чем в режиме на 32 бита. Так как x86 архитектура имеет относительное небольшое число регистров, Вам был нужен большой доступ к памяти, который является плохой вещью. Если Ваша программа не является памятью, связанной затем, это может ускорить вещи довольно существенным количеством.
  • Amd64 (который является и Intel и AMD ЦП в режиме на 64 бита, чтобы не быть перепутанным с Intels IA64, укусил режим, который очень отличается) только поддерживают нет - выполняют бит в их таблицах страниц, если Вы работаете в режиме на 64 бита. Безопасность, мудрая, Вы также хотите это.

Однако для Вашего *средняя программа и на amd64: нет никакого изменения скорости. Преимущества и недостатки кажутся одинаково большими и уравновешивают друг друга. Это не верно на другой архитектуре, такой как питание ПК 64, которые идут с достаточными регистрами в обеих версиях на 32 и 64 бита микросхемы.

Наконец, по практическим причинам:

  • Всегда используйте версию на 64 бита, если Вы думаете, что могли бы развернуть память вне 4 гибибайт.
  • Если у Вас есть несколько попыток установки ОС сохранить ту же версию используемой на всех них для хранения вещей простыми. (Который в эти дни означает, используют версию на 64 бита на всех них).
  • И поскольку безопасность используют его на всех узлах с 512 МиБ + RAM, если Вы используете ОС с рандомизацией адресного пространства. (Читайте: для любой современной ОС).

2
17.08.2015, 16:04
3 ответа
-

Мне удалось кое-что заставить работать. Из командной строки используйте:

history 2 | sed 's/^ *[^ ]* *//' | cut -d$'\n' -f1

Изнутри скрипта используйте:

arg=$(history 1 | sed 's/^ *[^ ]* *//')

Это успешно сохраняет команду и любые опции в виде строки.

2
27.01.2020, 21:54

Вероятно, есть более чистый способ, но вы можете получить предыдущую команду из истории с помощью

prev=$(fc -ln | tail -2 | head -1)
4
27.01.2020, 21:54

Вероятно, вам нужно включить расширение истории в вашем скрипте, так как оно отключено по умолчанию для неинтерактивного использования. set -H должен помочь.

Не проверено, но я предполагаю, что arg = "!!" поможет.

0
27.01.2020, 21:54

Теги

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