Linux — отправить Ctrl+C с помощью команд linux/bash для определенного сценария оболочки

Предполагая, что у вас есть настроенные ключи root ssh и локально сгенерированные шаблоны, stat с этим;

for HOST in $HOSTS ; do
    scp wifi-templates/* $HOST:/etc/NetworkManager/system-connections/
    ssh $HOST 'U=$(ls -1 /home/ | head -n 1); perl -pi -e "s/(permissions=user:)you(:;)/$1'$U'$2/g" /etc/NetworkManager/system-connections/*'
done

Шаблоны;

while read L ; do
    SSID=$(echo $L | cut -d ";" -f 1)
       N=$(echo $L | cut -d ";" -f 2)
    PASS=$(echo $L | cut -d ";" -f 3)
    cp template $N
    perl -pe 's/SSID/'$SSID'/g;s/PASS/'$PASS'/g' $N
done < AP.txt

*Этот код предназначен только для демонстрации. (Не тестировался и может потребовать настройки, чтобы он работал. )Пожалуйста, прочтите справочную страницу каждой команды перед использованием;

0
05.09.2019, 09:03
2 ответа

Конвейер, который вы показываете, по существу

sed expression | awk expression filename

Это будет запускать awkв файле filename, в то время как sedничего не делать, ожидая ввода от пользователя на его стандартном вводе (он будет читать то, что вы набрали на терминале в этот момент ).

Чтобы выйти из этого скрипта, просто нажмите Ctrl+D , чтобы сигнализировать об окончании ввода в процесс sed. Когда sedзамечает, что читать больше нечего, он завершает работу и сценарий завершает работу (, так как именно это «останавливало» его ).

Ваш текущий скрипт более или менее эквивалентен запуску

awk expression filename
sed expression

... так как две команды не взаимодействуют друг с другом по каналу.

То, чем ты хочешь заниматься

sed expression filename | awk expression

Здесь sedработает с файлом и отправляет результат на awkдля дальнейшей обработки. awkзапускается без имени файла, что означает, что он читает со своего стандартного ввода, который подключен к стандартному выводу sedчерез конвейер.

В вашем случае вы хотите

sed 's/\xC2\xA0//g' filename.txt | awk '$1=="|"{if(f){print f" "$2;f=""}else{f=$2}}'

(Будет ли этот конвейер делать то, что вы хотите, или нет, я не знаю, но теперь, по крайней мере, процессы sedи awkбудут передаваться правильно ).

4
28.01.2020, 02:22

ctrl -c отправляет сигнал «SIGINT», поэтому для отправки того же эффекта, что и ^C, используйте

kill -SIGINTpid -из -скрипт -

3
28.01.2020, 02:22

Теги

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