.bashrc :синтаксическая ошибка рядом с неожиданным маркером '('

Основываясь на предложенном связанном ответе, Почему папки в домашнем каталоге (Документы, изображения и т. д. )создаются только после первого графического входа в систему? , вы можете запустить эту команду от имени пользователя root, чтобы предварительно -создать каталоги XDG для вашего пользователяbob:

su - bob -c /usr/bin/xdg-user-dirs-update

С точки зрения передовой практики для паролей, это минное поле. Моя конкретная идея состоит в том, чтобы сгенерировать 12 -16-символьный псевдо-случайный пароль, который можно набрать довольно легко и установить, что он истечет при первом использовании(passwd -e).

useradd -m -c 'Bob is my friend' -s /bin/bash bob
passwd bob    # Enter a suitable pseudo-random password for Bob
passwd -e bob

Учтите, однако, что если ваш пользователь будет входить в систему с sshсертификатом/ключом, может случиться так, что ему даже не понадобится знать свой пароль.

2
15.08.2020, 21:35
2 ответа

Что касается синтаксиса оболочки, (— это специальный символ (, подобный ;, >, &и т. д. ), он не может появляться как часть присвоенного значения без экранируется или цитируется. Он используется, например. для запуска подоболочек, но, как вы заметили, в большинстве случаев это просто вызывает синтаксическую ошибку. (В отличие от, скажем, &, которая просто молча завершила бы команду.)

Однако круглые скобки — не единственная проблема, у вас также есть пробелы в пути. Это не синтаксическая ошибка, а изменение смысла команды. export PATH=/mnt/c/Program Files/Somepathозначает присвоить /mnt/c/Programзначение PATHи экспортировать переменную с именем Files/Somepath, что также вызывает ошибку, поскольку косая черта недопустима в имени переменной.

Вам нужно либо экранировать все круглые скобки и пробелы, как в Program\ Files\ \(x86\), либо просто заключить в кавычки всю строку:

PATH='/mnt/z/usr/local/bin:...:/mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath:...'

или только его части, хотя это может быть труднее читать:

PATH=/mnt/z/usr/local/bin:...:'/mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath':...

(Обратите внимание, что вы не можете сделать оба внутри друг друга, PATH='/mnt/c/Program\ Files\ \(x86\)/...'назначит строку, содержащую буквальные обратные косые черты.)

11
18.03.2021, 23:12

Добавить escape-символ \перед каждой скобкой:

Program Files \(x86\)/

3
18.03.2021, 23:12

Теги

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