Можно ли отключить символ амперсанда & в рыбной оболочке? (сделать экранирование \& ненужным)

Если вы не возражаете против некоторых пользовательских сценариев, вы можете использовать OverlayFS (, включенную в ядро ​​​​Linux с 2014 года ).

OverlayFS накладывает два местоположения файловой системы друг на друга :точка монтирования наложения показывает все из lower, если только она не была изменена или затенена чем-либо в upper. Все изменения точки монтирования оверлея записываются в upper; lowerникогда не трогали.
Кроме того, для OverlayFS требуется каталог work, который четко не задокументирован, но, по-видимому, служит временной областью перед переносом изменений в upper.

Используя это, вы можете создать тип контейнера, который вы ищете (см. ниже возможные крайние случаи):

mkdir -p /var/tmp/myoverlay/{upper,work,mount}
mount -t overlay -o lowerdir=/,upperdir=/var/tmp/myoverlay/upper,workdir=/var/tmp/myoverlay/work overlayfs /var/tmp/myoverlay/mount

Чтобы «войти» в контейнер, вы можете использовать командуchroot(«изменить корневой каталог» )для запуска командной (оболочки или другой )внутри вновь созданной/var/tmp/myoverlay/mount:

chroot /var/tmp/myoverlay/mount
# or
chroot /var/tmp/myoverlay/mount /usr/bin/apt moo # paths are relative to the new root directory

Обратите внимание, что этого может быть недостаточно для программ, которые пытаются получить доступ к аппаратным устройствам, псевдо--терминалам, процессам или системным функциям, :которые предоставляются ядром как специальные монтируемые файловые системы — см. вывод из mountниже:

proc on /proc type proc
sysfs on /sys type sysfs
udev on /dev type devtmpfs
devpts on /dev/pts type devpts

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

mount -t proc proc /var/tmp/myoverlay/mount/proc
mount -t sysfs sys /var/tmp/myoverlay/mount/sys
mount -t devtmpfs dev /var/tmp/myoverlay/mount/dev
mount -t devpts devpts /var/tmp/myoverlay/mount/dev/pts

Обратите внимание, что это даст вашему контейнеру больше доступа к системе, чем вам хотелось бы. В конечном счете, вам нужно точно знать свой вариант использования, чтобы решить, достаточно ли отделена оверлейная файловая система от вашей обычной системы для этого конкретного варианта использования.


Могут возникнуть дополнительные трудности, в зависимости от схемы вашей файловой системы :каталог lowerберется как есть, без каких-либо дополнительных файловых систем, смонтированных под ним. Если, например, ваша /homeявляется отдельной файловой системой, OverlayFS покажет вам только пустую точку монтирования в /home.

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

2
05.12.2020, 09:00
1 ответ

У Fish нет возможности отключить это. Причина, по которой в настоящее время существует возможность отключить ?, заключается в том, что глобус ?устарел и будет полностью удален в будущем. Для &такого плана нет.

Что вы можете сделать, так это добавить привязку, которая вставляет \&при нажатии &. Что-то вроде

bind \& 'commandline -i "\&"'

Конечно, это означает, что вам придется выяснить, как вставить фактическое &, если вы действительно хотите его использовать.

2
18.03.2021, 22:45

Теги

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