& ldquo; К сожалению, в Ubuntu 13.04 произошла внутренняя ошибка & rdquo; с ядром обновления

Основная причина в том, что ваша команда echo берет x символов из переменной и содержит 14 пробелов. Это означает, что общее количество символов в пространстве выходной строки не будет согласованным.

Вместо этого вы можете использовать printf со спецификатором ширины %-10s для отступа слева следующим образом:

bash-4.3$ for i in "${a[@]}"; do     printf "%-10s%-4s|\n"  "${i:0:10}" " "; done
1.wav         |
2.wav         |
3.wav         |
input.txt     |

Таким образом, любая переменная, которая у вас есть, будет сделана так, чтобы соответствовать 10 к этим 10 символам мы добавляем 4. Знак - делает каждую строку выравниваемой по левому краю.

Число -10 в %-10s должно оставаться неизменным, чтобы гарантировать, что даже если файл короче 10 символов, мы все равно получим строку из 10 символов с добавленными пробелами. Но %-4s часть может быть разнообразной. Например, в приведенном выше примере у %-4s будет 4 пробела, но если мы хотим иметь 14 пробелов, используйте %-14s.


Обратите внимание, что обычно рекомендуется использовать против парсинга вывода команды ls , что именно то, что вы делаете. В качестве альтернативы мы можем использовать команду find со структурой while IFS= read -r -d '' следующим образом:

bash-4.3$ find -maxdepth 1 -type f -print0 | while IFS= read -r -d '' file;
> do
>     printf "%-10s%-4s|\n"  "${file:0:10}" " "
> done
./3.wav       |
./1.wav       |
./2.wav       |
./.swp        |
./input.tx    |

Обратите внимание, что find является рекурсивным, поэтому она работает и с подкаталогами. Если вы хотите избежать этого, используйте опцию -maxdepth 1.

Обратите внимание, что find также имеет свою собственную опцию -printf, которая может быть более эффективной, если все будет выполнено одним процессом, а не двумя (это find плюс подоболочка, в которой работает while):

$ find /bin -type f -printf "%-15f|\n" 2>/dev/null | head -n 5
hostname       |
nc.traditional |
fusermount     |
loadkeys       |
zless          |

В идеале я бы предложил записать все во временный файл, вычислить самую длинную строку (или самое длинное имя файла в файле) и заполнить столько пробелов, сколько вы хотите, соответственно. [Тысяча сто двадцать семь]

1
задан 16.04.2020, 16:18

2 ответа

Я получил ту же ошибку при обновлении. Через час канал #ubuntu irc дает мне указатели на связанные сообщения об ошибках:

как получить эти сообщения?

откройте терминал и запустите диспетчер обновлений, набрав update-manager

в первый раз, когда я поймаю (голландские тексты говорят действия, которые он выполнял):

user @ Hostname: ~ $ update-manager ... некоторые сообщения о некоторых вещах для проверки пароля ... Er wordt gecontroleerd из er een nieuwe Ubuntu-uitgave is 'saucy .tar.gz 'tegen' saucy.tar.gz.gpg 'verifyiëren' saucy.tar.gz 'wordt uitgepakt Ошибка сегментации (ядро сброшено)

Следующая попытка доставляет:

user @ Hostname: ~ $ update-manager Er wordt gecontroleerd er een nieuwe Ubuntu-uitgave имеет сигнал в реальном времени 0

Это последнее время sage - это сообщение об ошибке, упомянутой выше.

Похоже, что это связано и с драйвером Nvidia, временное решение - переключиться на драйвер nouveau, чтобы выполнить обновление. Но в #ubuntu было высказано предположение, что кажется разумным ожидать исправления для этого. Так что просто подождите ..

1
ответ дан 16.04.2020, 16:19

«Извините, в Ubuntu 13.10 произошла внутренняя ошибка». Вы можете отключить приложение, отредактировав следующий файл:

gksu gedit /etc/default/apport

Теперь в этом файле найдите строку [111 ]

Измените enabled=1 на enabled=0.

Подробнее о шагах см. Здесь:

1
ответ дан 16.04.2020, 16:20

Теги

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