Самый простой метод - использовать одинарные кавычки с правой стороны:
if [ "$line" == '#orb_plugins = ["local_log_stream", "iiop_profile", "giop", "iiop"];' ]
Таким образом, строка, которую нужно сопоставить, интерпретируется буквально.
Если вы предпочитаете использовать двойные кавычки, вы не должны избегать скобок ([]
), а только двойных кавычек ( ""
):
if [ "$line" == "#orb_plugins = [\"local_log_stream\", \"iiop_profile\", \"giop\", \"iiop\"];" ]
Когда вы делаете su
, он отбрасываетDISPLAY
переменную среды (, которая используется, чтобы указать терминалу, где отображать его окно ). Если вы установите DISPLAY
, вы столкнетесь с другой проблемой (по сути разрешениями ), которые запрашивались более одного раза, например. X «Не удается открыть дисплей::0», в то время как переменная DISPLAY верна (, отмечая, что одна из них была неправильно помечена как дубликат для еще одной связанной проблемы ).
Нет смысла использовать sudo
, за которым следует su
, если можно использовать su
.
Проблема в том, что другой используемый не может использовать $DISPLAY
. Вы не хотите, чтобы произвольные пользователи подключались к вашему дисплею. Если вы действительно хотите разрешить другим пользователям подключаться к вашему дисплею, вы также должны предоставить им доступ к вашему файлу $XAUTHORITY
. Обычно ваш файл $XAUTHORITY
не содержит информации более чем для одного дисплея, поэтому вы можете просто сделать содержимое файла доступным для целевого пользователя или скопировать файл.
Вы также можете извлечь информацию и объединить ее с файлом $XAUTHORITY
целевого пользователя. Комментарий от @mosvy предполагает ssh
, но su
тоже работает.
xauth extract - $DISPLAY | su sebastien -c 'xauth merge - <&7' 7<&0 </dev/tty
Наконец-то я наткнулся на эту команду, и теперь она работает:
$ xhost local:$USER
non-network local connections being added to access control list
$ sudo su - michel -c "xterm -e 'sleep 1'"
$
Я перепробовал буквально каждое решение из всех подобных вопросов. Ни один из них не работает. Однако решение, которое я нашел здесь(Написано на китайском языке ), решено.
Вам просто нужно удалить ~/.Xauthority
и перезапустить оболочку.
После повторного входа в систему все работает отлично.