What I want is a normal way to quit, like q in top.
Это КонтрольС:)
I am just curious about the question, because I feel that killing the process is not a good way to quit something.
^C
(ControlC)отправляет SIGINT процессу, который определен как:The SIGINT signal is sent to a process by its controlling terminal when a user wishes to interrupt the process
Это именно то, что вы хотите здесь сделать, это прерывание
tail
. Нет другого способа выполнить то, что вы пытаетесь сделать ("хорошо" бросить хвост ), и хотя другие ответы позволяют остановитьtail
другими способами, они ничем не лучше.Нажатие
^C
попытается прервать задачу в Linux --это совершенно нормально, и это только «нехорошо», если этот процесс находится в середине чего-то, и вы не даете ему завершиться, а затем единственный «нехороший» побочный эффект — это остатки этого процесса. Например,^C
в середине командыmake
оставляет частично -скомпилированное программное обеспечение, но это нормально :дальнейший запускmake
очистит/возобновит это с того места, где оно было остановлено.
Попробуйте это,
#complete_robotpath=() ### not used in script... so commented
IFS=','
A=Basic-Call,Call-Hold ## In shell, we dont prefix with $ while declaring variable and should not have space in value.
B=VoLTE-VoLTE,VoLTE-3G
read -ra ADDR1 <<< "$A" ## In shell, we should pass value of a variable by prefixing with $
read -ra ADDR2 <<< "$B" IFS=',' ## In shell, we should pass value of a variable by prefixing with $
for i in "${ADDR1[@]}";
do
for j in "${ADDR2[@]}";
do
robot_path+=`echo $i/$j/` ## "+=" to concatinate string and sufix by / as expected result
done
done
pybot_exec_cmd=`echo $robot_path`
echo $pybot_exec_cmd
Выход:
Basic-Call/VoLTE-VoLTE/Basic-Call/VoLTE-3G/Call-Hold/VoLTE-VoLTE/Call-Hold/VoLTE-3G/
После того, как вы изменили требования вашего вопроса еще раз ...
В bash
вы могли бы использовать раскрытие фигурной скобки:
$ printf '%s' {Book/,Pen/,Pencil/,n/}{Cat/,Rat/,Bat/,m/}
Book/Cat/Book/Rat/Book/Bat/Book/m/Pen/Cat/Pen/Rat/Pen/Bat/Pen/m/Pencil/Cat/Pencil/Rat/Pencil/Bat/Pencil/m/n/Cat/n/Rat/n/Bat/n/m/
Обратите внимание, что вывод не заканчивается новой строкой.
Чтобы создать path
из двух разделенных запятыми строк в $A
и$B
:
#!/bin/bash
A="Book,Pen,Pencil,n"
B="Cat,Rat,Bat,m"
oldIFS=$IFS
IFS=,
for i in $A; do
for j in $B; do
path+="$i/$j/"
done
done
IFS=$oldIFS
printf '%s\n' "$path"
Выход:
$./script.sh
Book/Cat/Book/Rat/Book/Bat/Book/m/Pen/Cat/Pen/Rat/Pen/Bat/Pen/m/Pencil/Cat/Pencil/Rat/Pencil/Bat/Pencil/m/n/Cat/n/Rat/n/Bat/n/m/