Я полагаю, что вы используете wayland, если вы запустите среду рабочего стола с помощью Xorg, тогда gpick должен работать.
У меня была та же проблема в gnome, переход на Gnome с Xorg перед входом в систему заставил gpick снова работать.
Да, заканчивайте строки знаком \
для продолжения на следующей строке.
ssh user@server << EOF
command_one
command_two argument1 argument2 argument3 argument4\
argument5 argument6 argument7
command_three
EOF
Внутри здесь документы, где разделитель после<<
(здесьEOF
)не заключен в кавычки, последовательность <backslash><newline>
удалена, это продолжение строки .
На самом деле, единственный случай, когда <backslash><newline>
не удаляется, это:
<backslash><backslash><newline>
)cat << EOF
foo\
bar
EOF
выходы
foobar
Итак, здесь можно сделать:
ssh user@server << EOF
command_one
command_two argument1 argument2 argument3 argument4 \
argument5 argument6 argument7
command_three
EOF
И ssh
в конечном итоге будет накормлен:
command_one
command_two argument1 argument2 argument3 argument4 argument5 argument6 argument7
command_three
На стандартном вводе.
Даже если вы использовали :ssh... << 'EOF'
, чтобы избежать расширения параметров, подстановки команд и арифметического расширения, выполняемого внутри документа здесь -, ssh
будет передано:
command_one
command_two argument1 argument2 argument3 argument4 \
argument5 argument6 argument7
command_three
Но удаленная оболочка будет интерпретировать это <backslash><newline>
как продолжение строки, так что это будет иметь тот же эффект.
Обратите внимание, что при выполнении:
ssh user@server << EOF
sshd
на удаленном узле запускает оболочку входа пользователя для интерпретации этого кода. Так как это может быть что угодно, не обязательно оболочка типа Bourne -, может быть лучше запустить:
ssh user@server sh << EOF
Где sshd
работает user-s-login-shell -c sh
, чтобы вы знали, что Bourne -подобная оболочка интерпретирует ваш код.
Например, JVM_ARGS="-Xms512m -Xmx25000m"./jmeter.sh...
— это оболочка Bourne -или совместимый синтаксис. Это будет работать в оболочках csh
, tcsh
, rc
, es
, fish
, поэтому не будет работать с ssh user@server sh << EOF
, если оболочка входа user
на server
была одной из этих снаряды.
Существенное отличие заключается в том, что в этом случае user-s-login-shell
не запускается как оболочка входа в систему, поэтому не будет читать /etc/profile
или~/.profile
(или эквивалент для оболочки входа пользователя )для установки входа в систему. сессия вверх.
В качестве альтернативы,вы можете преобразовать этот код в синтаксис, совместимый со всеми этими оболочками :env JVM_ARGS='-Xms512m -Xmx25000m'./jmeter.sh...
(, использовать одинарные кавычки вместо двойных кавычек и использовать env
для передачи env var вместо специфичного для Bourne/rc синтаксиса envvar=value cmd
).
Обратной косой черты можно избежать, используяxargs
:
ssh user@server sh << EOF
command_one
xargs command_two << END_OF_ARGS
argument1 argument2 argument3 argument4
argument5 argument6 argument7
END_OF_ARGS
command_three
EOF
Или с помощью такой оболочки, как rc
, ksh93
, zsh
, bash
, yash
и массива:
С синтаксисом rc
/ zsh
:
ssh user@server zsh << 'EOF'
command_one
args=(
argument1 argument2 argument3 argument4
argument5 argument6 argument7
)
command_two $args
command_three
EOF
(здесь цитируется EOF
, так что $args
не расширяется локальной оболочкой ).
Или с синтаксисом ksh93
/ bash
/ yash
(также работает сzsh
):
ssh user@server bash << 'EOF'
command_one
args=(
argument1 argument2 argument3 argument4
argument5 argument6 argument7
)
command_two "${args[@]}"
command_three
EOF