Я не пробовал это с LXDE, но теоретически он не должен завершать эти процессы, если:
а. Это лидер сессии, что маловероятно. б. Он добровольно решает их убить. в. Какой-то другой процесс завершает их работу в результате завершения работы lxpanel (или другого средства запуска ).
Я не думаю, что это относится к lxpanel. В некоторых более монолитных средах (, например, Gnome Shell ), некоторые аналогичные действия могут привести к завершению работы всей оболочки и, следовательно, всех приложений.
Связанный ответ:https://unix.stackexchange.com/a/158736/58388
Зачем ограничиваться первой строкой? Пока вам не нужно обрабатывать гигабайты данных, где хранение всего этого в памяти было бы проблемой, вы можете просто сохранить самое длинное первое поле, а затем использовать его для форматирования остальных :
.$ cat lines
4.yml
1.sh
1.ico
1.gitignore
1.css
30.md
1.txt
8.png
И:
$ awk -v l=0 '{
if(length($1)>l){
l=length($1)
}
a[$2]=$1
}
END{
for(line in a){
printf "%"l"s %s\n",a[line],line
}
}' lines
8.png
1.ico
1.txt
1.css
1.sh
30.md
1.gitignore
4.yml
Так:
$ awk -v l=0 '{ if(length($1)>l){l=length($1)} a[$2]=$1}END{for(line in a){printf "%"l"s %s\n",a[line],line}}' lines |
column -x | expand -t 8
8.png 1.ico 1.txt 1.css 1.sh
30.md 1.gitignore 4.yml
Если вам это не нужно и вам нужна только первая строка, вы можете упростить до:
$ perl -pe '/^(\s+)/; $l//=$1; s/^$l//' lines | column -x | expand -t 8
30.md 4.yml 1.sh 1.ico 1.gitignore
1.css 1.txt 8.png
Я должен был изучить awk (1)раньше. По крайней мере, я мог бы написать небольшую программу, которая запоминает количество начальных пробелов в первой строке и форматирует каждую строку:
$ awk '
NR==1 && match($0, /^ */) {p=RLENGTH+1};
{print(substr($0,p))}
' lines | column -x | expand -t 8
30.md 8.png 4.yml 1.css 1.gitignore
1.ico 1.sh 1.txt
Gnu sed :сохраняет начальные пробелы в памяти, а затем удаляет такое количество начальных пробелов из каждой строки. Предполагая, что строки отсортированы, как показано.
sed -Ee '
1{h;s/\S.*//;x;}
G;s/^(\s*)(.*)\n\1$/\2/
' file
awk '
NR==1 {
l0=length()
$1=$1
re = "^\\s{" l0-length() "}"
}
sub(re, "")+1
' file
perl -lpe '
$x //= do{/^\s*/g;+pos;};
$_ = substr($_,$x);
' file
Надеюсь, я понимаю, и я на правильном пути:
$ sed 's/^[[:blank:]]//' file | cut -d' ' -f3- | column -x | expand -t 8 | cut -d' ' -f3-
30.md 8.png 4.yml 1.css 1.gitignore
1.ico 1.sh 1.txt
Например, для такого сценария:
30.md
8.png
4.yml
1.css
1.gitignore
4000.ico
1.sh
1.txt
300.foo
$ sed 's/^[[:blank:]]//' file | cut -d' ' -f3- | column -x | expand -t 8 | cut -d' ' -f3-
30.md 8.png 4.yml 1.css 4000.ico
1.gitignore 1.sh 1.txt 300.foo