Можно сделать это с sed. Проблема - то, что необходимо включать строку в код дважды. Однажды, чтобы протестировать его, снова вставить его.
sed -i '/eval \$(perl -I\$HOME\/foo\/lib\/perl5 -Mlocal::lib=\$HOME\/foo)/!{ ${ s/$/\neval \$(perl -I\$HOME\/foo\/lib\/perl5 -Mlocal::lib=\$HOME\/foo)/; }; }' /path/to/file
xmodmap (1) страница справочника имеет пример для точно этого
!
! Swap Caps_Lock and Control_L
!
remove Lock = Caps_Lock
remove Control = Control_L
keysym Control_L = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L
но если Вы хотите закончить делать его способ, которым Вы запустили, я думаю, что необходимо добавить, по крайней мере, remove
и add
строки
remove Lock = Caps_Lock
remove Control = Control_L
keycode 37 = Caps_Lock
keycode 66 = Control_L
add Lock = Caps_Lock
add Control = Control_L
Я предполагаю, что это имеет место на основе этого абзаца
add MODIFIERNAME = KEYSYMNAME ...
This adds all keys containing the given keysyms to the indi‐
cated modifier map. The keysym names are evaluated after all
input expressions are read to make it easy to write expressions
to swap keys (see the EXAMPLES section).
который заставляет его казаться, что изменения модификатора (сдвиг, управление, и т.д.) не становятся прикладными, пока Вы не выполняете это также.
(И логически то же с remove
)
Свободно связанный ответ: Я хотел повторно отобразить клавишу Caps Lock на контроль, из-под которого выходят, выходя из-под фактического вышедшего нетронутого контроля. xmodmap страница справочника также предлагает решение:
keycode 66 = Control_L
clear Lock
add Control = Control_L