Чтобы получить обычные точечные файлы, убедитесь, что sudo
не изменяет переменную среды HOME
. Произойдет ли это, зависит от конфигурации времени компиляции и времени выполнения sudo. Чтобы сохранить HOME
, отредактируйте файл sudoers
(запустите visudo
, никогда не редактируйте этот файл напрямую!) И убедитесь, что он содержит
Defaults !always_set_home, !set_home
Defaults env_keep+=HOME
(некоторые из них может быть ненужным в зависимости от параметров компиляции.) И, конечно, не запускайте sudo -i
.
Однако избегайте слишком многого в качестве root. Например, вместо запуска редактора от имени пользователя root используйте sudoedit
.
Вы сводите входные данные к одному значению.
Вы должны сделать
list=("${@}")
, чтобы сохранить массив и потенциал пробелов в аргументах.
Если вы пропустите "
, то что-то вроде ./ script.sh" ab "2 3 4
вернет длину 5, потому что первый аргумент будет разделен. С помощью "
мы получаем
$ cat x
#!/bin/bash
list=("${@}")
echo array = ${list[*]} and length = ${#list[*]}
$ ./x "a b" 2 3 4
array = a b 2 3 4 and length = 4