Цитирование руководства:
after they are expanded and before they are executed
Вы утверждаете:
But I found that the traces it prints out are not exactly the results after expansion but before execution
Но они есть. Результатом раскрытия является список слов . Bash использует кавычки для однозначного представления списка слов. То, что печатает bash, не является промежуточным результатом расширения, когда удаление кавычек не выполнялось. Это печатное представление списка строк.
Например, если трассировка была
+ cp foo bar qux
, тогда невозможно было бы узнать, была ли команда cp
с тремя аргументами foo
, bar
и qux
или с двумя аргументами foo bar
и qux
(, например. потому что исходная команда былаcp "foo bar" qux
)или с двумя аргументами foo
и bar qux
, или если на самом деле это была команда с именем cp foo bar qux
и т. д. Чтобы сделать трассировку однозначной, bash использует кавычки. Кавычки выбраны таким образом, чтобы трассировка была одним из возможных способов запуска этой команды в bash-скрипте.
Например, трассировка + echo '$var'
означает, что команда echo
выполняется с одним аргументом, строкой из 4 -символов $var
. Есть много способов запустить эту команду, например:
echo '$var'
echo \$var
echo \$\v\a\r
echo "\$v"\a''''r
echo "$a" # after running a='$var'
Либо создайте пользователя alice
с uid
из 1001
, либо измените владельца файлов с 1001
на 1002
.
Создать пользователя с определеннымuid
:
useradd alice -u 1001
find
все файлы, принадлежащие 1001
и chmod
их наalice
(это также изменит gid
на alice
основную группу):
find /data -uid 1001 -print0 | xargs -0I{} chown alice: {}
Пара вариантов. Если у вас нет пользователя в новой системе с uid=1001
, измените uid Алисы на этот через usermod -u 1001 -g 1001 alice
. Другой вариант — изменить владельца файлов на /data
с помощью sudo find /data -uid 1001 -print0 | xargs -0 chown alice:alice
.