Я поместил этот контент в файл.Xmodmap в своем домашнем каталоге:
keycode 54 = c C c C ccedilla Ccedilla copyright
keycode 57 = n N n N ntilde Ntilde asciitilde
keycode 46 = l L l L at
keycode 38 = a A a A atilde Atilde atilde
затем я выполняю xmodmap ~/.Xmodmap
и становлюсь счастливым щенком.
Я запустил xmodmap -pke > current_xmodmap.txt
, в котором указана текущая конфигурация в указанном выше формате. Я открыл файл в текстовом редакторе, чтобы найти то, что я хотел бы изменить. Там отображаются все ключи, поэтому невозможно что-то пропустить.
Вhttp://wiki.linuxquestions.org/wiki/List_of_Keysyms_Recognised_by_Xmodmapможно получить список всех возможных ключей.
Таким образом, имея эти два бита информации под рукой, становится возможной задачей создать файл, который исправляет системный Xmodmap во что-то, что соответствует вашим ожиданиям.
exec
нельзя использовать для передачи вывода напрямую в другую программу, его можно использовать только для перенаправления вывода в файл.
К счастью, в Unix все можно сделать так, чтобы оно выглядело как файл.
Для ksh (и для совместимости с POSIX )необходимо создать именованный fifo и перенаправить на него вывод сценария.
#!/bin/ksh
fifo=./exec.fifo
log=./exec.ksh.log
# delete the fifo if it already exists
[ -e "$fifo" ] && rm -f "$fifo"
mkfifo "$fifo"
# now run the sed script in the background. Its purpose is to modify
# the input coming from the fifo before saving it to the log file
( sed -e 's/-pa=[^ ]* /-pa=*** /g' < "$fifo" > "$log" ) &
# set up a function and trap to delete the fifo on exit.
cleanup () { rm -f "$fifo" ;}
trap cleanup EXIT
# now do the exec
exec > "$fifo"
# and finally do something that produces some output.
echo "dsmadmc -id=admin -pa=pw123_ q pr"
Когда вы запускаете скрипт, вывод будет фильтроваться через sed через fifo, а затем перенаправляться в файл журнала:
$./exec.ksh
$ cat exec.ksh.log
dsmadmc -id=admin -pa=*** q pr
Однако, если вы используете bash
, это немного проще. Вы можете использовать Замена процесса , чтобы предоставить «файл» для перенаправления вывода вместо fifo (метод fifo все еще работает, если вы предпочитаете писать переносимые сценарии оболочки ).
Например:
#!/bin/bash
exec 1> >(sed 's/-pa=[^ ]* /-pa=*** /g' >./exec.bash.log)
echo "dsmadmc -id=admin -pa=pw123_ q pr"
Опять же, выходные данные будут изменены sed перед сохранением в файле журнала.
$./exec.bash
$ cat exec.bash.log
dsmadmc -id=admin -pa=*** q pr