Решение для пешеходов:
tmpfile=$(mktemp)
mycommand >"$tmpfile"
if [ -s "$tmpfile" ]; then
cat "$tmpfile" >myfile
fi
rm -f "$tmpfile"
То есть сохранить вывод во временный файл, а затем проверить, пустой он или нет. Если он не пуст, скопируйте его содержимое поверх вашего файла. В конце удалите временный файл.
Я использую cat "$tmpfile" >myfile
, а неcp "$tmpfile" myfile
(или mv
), чтобы получить тот же эффект, который вы получили бы от mycommand >myfile
, т. е. чтобы обрезать существующий файл и сохранить права собственности и разрешения.
Если $TMPDIR
(, используемый mktemp
), находится в смонтированной в памяти -файловой системе, то это не будет производить запись на диск, за исключением, возможно, записи в myfile
. Кроме того, это было бы более портативно, чем использование ifne
.
Из справочной страницы x0vncserver
-SecurityTypes sec-types
Specify which security scheme to use for incoming connections. Valid values are a comma separated list of None, VncAuth, Plain, TLSNone, TLSVnc, TLSPlain, X509None, X509Vnc and X509Plain. Default is VncAuth,TLSVnc.
−X509Cert path
Path to a X509 certificate in PEM format to be used for all X509 based security types (X509None, X509Vnc, etc.).
−X509Key path
Private key counter part to the certificate given in X509Cert. Must also be in PEM format.
−GnuTLSPriority priority
GnuTLS priority string that controls the TLS sessionâs handshake algorithms. See the GnuTLS manual for possible values. Default is NORMAL.
Таким образом, в основном вы должны установить -SecurityTypes X509...
, а затем указать путь к вашему сертификату и закрытому ключу в -X509Cert
и -X509Key
. -GnuTLSPriority
устанавливает приоритет GnuTLS.
Возможный приоритет GnuTLS является исчерпывающим, поскольку существует множество шифровальных комбинаций. Читать из документов GnuTLS
Извинения :Я не уверен, что это правильный ответ, потому что он не проверен, и я никогда не использовал сертификаты X509 для VNC, (ну, мои веб-браузеры читают их для меня ). Это выглядит слишком коряво в комментарии.