Как перенаправить весь вывод скрипта в файл и заменить пароли?

Я поместил этот контент в файл.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 во что-то, что соответствует вашим ожиданиям.

2
13.04.2021, 15:07
1 ответ

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
4
28.04.2021, 22:52

Теги

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