Разъяснение для документации Bash о встроенной опции disown -h

Использование sed

Насколько я понимаю, у вас есть файл text , который выглядит примерно так:

$ cat text
1
2
3
4
5

И вы хотите извлечь 3-ю и 5-ю строки и поместить их в середину некоторых операторов echo . В этом случае попробуйте:

$ {  echo 'Some text';  echo 'Some text';  echo -n 'Some text';  echo -n "$(sed -n 3p text)$(sed -n 5p text)";  echo 'Some text';  echo 'Some text'; } >file
$ cat file
Some text
Some text
Some text35Some text
Some text

Упрощение

Вышеупомянутое может быть выполнено одной командой echo :

$ echo $'Some text\nSome text\nSome text'"$(sed -n 3p text)$(sed -n 5p text)"$'Some text\nSome text' >file
$ cat file
Some text
Some text
Some text35Some text
Some text

Или одной командой printf :

$ printf 'Some text\nSome text\nSome text%s%sSome text\nSome text\n' "$(sed -n 3p text)" "$(sed -n 5p text)" >file
$ cat file
Some text
Some text
Some text35Some text
Some text

Как работает команда sed

В приведенном выше примере используются команды sed, такие как:

sed -n 3p text

Здесь -n - это параметр, который сообщает sed не печатать ничего, если мы явно не попросим об этом. 3p - это команда, которая сообщает sed напечатать третью строку. Точно так же мы используем 5p , если хотим напечатать пятую строку.

Использование awk

Решение для awk (подсказка: Runium):

awk '
    BEGIN{
        printf "%s","Some text\nSome text\nSome text"
    }
    NR>5 {exit}
    NR==3 || NR==5 {printf "%s", $0}
    END{
        printf "%s","Some text\nSome text\n"
    }' text
3
01.07.2016, 20:09
1 ответ

Без -h задание удаляется из таблица активных вакансий, с -h ее нет.

Все описано в руководстве:

 disown [-ar] [-h] [jobspec ...]

       (...)
       If the -h option is given, each jobspec is not removed
       from the table, but is marked so that SIGHUP is not sent to the
       job  if  the shell  receives  a SIGHUP.

Чтобы увидеть разницу, запустите задания после отказа от задания с -h и без него.

5
27.01.2020, 21:16

Теги

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