Найти и заменить цвета в файлах CSS из командной строки

##Background:

cd $(mktemp -d)
> file1

##Setup state (background bash + pipe)
pipeDir=$(mktemp -d)
mkfifo $pipeDir/p #pipe for communicating with the shell
#start the shell in the background, make it read from the pipe, and disable I/O buffering
stdbuf -i0 -o0 bash < $pipeDir/p & 
#open the pipe from the other end on fd 3 (or another fd)
exec 3>$pipeDir/p && 
rm -rf "$pipeDir" #don't need the directory or the physical link to the pipe anymore

##Now you can communicate with the shell
echo ls >&3
#Ouptuts: file1

#This is how you end it all
exec 3>&-

Ваша функция должна поддерживать глобальное состояние. Ваша функция должна будет проверять, было ли установлено состояние, и устанавливать его, если оно не было установлено (возможно, проверяя существование переменной). После установки или если состояние существует, ей нужно только echo свои аргументы ("$@") в &3 или любой другой дескриптор файла, на который вы открываете трубу.

Возможно, лучше сделать три функции (это будет немного эффективнее):

init_new_bash
new_bash
end_new_bash

Пример (нужна лучшая обработка сигналов):

#!/bin/sh 
#^will work in bash also
init_new_bash(){
    set -e #all must succeed
    pipeDir=$(mktemp -d)  
    mkfifo "$pipeDir/p" 

    stdbuf -i0 -o0 bash < "$pipeDir"/p & 
    bashPid=$! 

    exec 3>"$pipeDir/p"
    rm -rf "$pipeDir" 
    set +e
}
new_bash(){ echo "$@" >&3; }
end_new_bash(){ exec 3>&-; wait "$bashPid"; }

##Test run:
init_new_bash && {

   new_bash echo hello world
   new_bash ls

end_new_bash;}
0
27.11.2017, 11:54
0 ответов

Теги

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