Псевдоним, когда не первое слово: `G='|grep'` тогда `команда G grep-string`

Поскольку ваши требования изменились, я снова отвечаю.

В вашем случае я бы создал специальный busybox, статически связанный с этими инструментами: ash, (основные утилиты, такие как ls mv cp rm), dd, vi и gzip / gunzip. Затем напишите сценарий, который вы будете запускать с USB (USB-накопитель будет отформатирован в любую файловую систему ext *, верно?), Который будет использовать только этот двоичный файл busybox из флэш-памяти при выполнении команд, например, с вашей командой обновления он будет выглядеть так : / mnt / pendrive / busybox gunzip -c /mnt/pendrive/hda.img.gz | / mnt / pendrive / busybox dd of = / dev / nand .

Перед запуском обновления я бы запустил оболочку (в интерактивном режиме) из busybox перед обновлением с помощью exec / mnt / pendrive / busybox ash -l , перезаписав любую оболочку, которую вы используете в памяти, потому что после перезаписи он станет недоступен. В качестве альтернативы, если вы планируете запускать его в пакетном режиме, вы не должны использовать строку #! / Bin / sh , но должны указать полный путь к оболочке busybox, например #! / Mnt / pendrive / busybox sh , или, когда он запускается как / bin / sh /mnt/pendrive/script.sh, вы должны запускать его с фактическим двоичным файлом busybox: / mnt / pendrive / busybox sh / mnt / pendrive / script.sh .

Помните, что перед обновлением вы должны проанализировать и остановить любую системную активность, которая может записать что-то в NAND во время обновления, поэтому, если у вас запущены какие-то службы (даже системный журнал), вы должны их выключить. Используйте для этого правильные инструменты, возможно, у вас есть запущенный диспетчер процессов, который их возродит.

И, вероятно, отключение питания должно быть мгновенным, никакие размонтирования или сценарии, которые завершают работу служб, никогда не должны запускаться. Вы можете добиться этого с помощью echo o> / proc / sysrq-trigger или соответствующей команды выключения, которая просто немедленно вызовет соответствующий системный вызов reboot ().

Дополнительную информацию о busybox можно найти здесь: http://busybox.net/ . Для безопасности выполнения (нет требований к разделяемым библиотекам даже в статически скомпонованном двоичном файле) я бы собрал busybox с musl libc ( http://www.musl-libc.org/ ).

0
29.06.2018, 13:04
1 ответ

Оболочка Bourne поддерживает псевдонимы, которые раскрываются всякий раз, когда имя отображается в командной строке.

alias -a name=value

устанавливает такой псевдоним. Эта концепция восходит к идее 1980 года о первом клоне UNIX UNOS. Используйте с осторожностью, так как вам нужно выйти из name, если вы не хотите, чтобы он расширялся.

См.:http://schilytools.sourceforge.net/man/man1/bosh.1.html

Интерфейс, аналогичный интерфейсу UNOS 1980 года, в настоящее время находится на странице 6, раздел псевдонимов — на странице 7, а команда псевдонимов — на странице 36.

Bourne Shell также реализует концепцию постоянных псевдонимов из UNOS.

Поскольку псевдонимы в Bourne Shell более эффективны, чем в других оболочках, рекомендуется потратить некоторое время и поиграть с этой функцией, чтобы понять, что она может делать.

0
28.01.2020, 02:18

Теги

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