Обнаружена и исправлена проблема.
Был неправильный путь к каталогу на сервере NAS, я использовал путь для пользователя admin, который является полным путем, но поскольку пирог имеет доступ только к папке pi, то он просто «напрямую» подключается к этой папке.
-121--289243-
Если оболочка входа даже не запускается, вход в систему невозможен. Клиент отправляет последовательность на сервер, и для интерпретации последовательности требуется оболочка входа пользователя на сервере. Клиент не имеет пути указывать серверу «выполнить другую команду».
Это механизм безопасности: если оболочка пользователя ограничена тем, что он может сделать, то пользователь не может сделать ничего, что не позволяет.
Если вы заблокировали доступ ко всем учетным записям в системе, то вам придется использовать метод, который обходит обычные имена входа, например физический доступ или консоль восстановления.
Некоторые советы:
/etc/shells
. bash-static
или sash
или набор учетную запись toor (альтернативный способ входа корня в систему). Имейте в виду, что sudo
тоже может сломаться; возможно, вы захотите иметь экстренный пароль на аккаунте, который случайно создан (уникальный и не заучен) и записан на бумажке, которую вы храните в сейфе. -121--114075-
В этих случаях можно проверить возвращаемое значение cpp напрямую:
HAVE_UBSAN=$(cpp -dM -fsanitize=undefined < /dev/null > /dev/null 2>&1 && echo 1)
if [ "$HAVE_UBSAN" = 1 ]
. . .
или даже
if cpp -dM -fsanitize=undefined < /dev/null > /dev/null 2>&1
then
export CXXFLAGS="-DNDEBUG -g2 -O2 -fsanitize=undefined $MY_CXXFLAGS"
make ...
# Run self tests, scrape output for failures
fi
в качестве альтернативы, и добраться до точки вашего вопроса, чтобы свести на нет смысл сравнения, то есть проверить на отказ cpp, очень похоже на приведенный вами пример C++, используйте !
:
if ! cpp -dM -fsanitize=undefined < /dev/null > /dev/null 2>&1
then
echo 'NO sanitizer'
fi
Аналогичный метод можно использовать для установки VALGRIND:
VALGRIND=$(which valgrind > /dev/null && echo 1)
Поскольку вы знаете C++, вы будете знакомы с & &
и | |
. Они работают аналогично в командной строке оболочки. В приведенном выше примере, если значение which valgrind >/dev/null
является успешным, то «1» будет эхом.
^H
en este caso es retroceso, también conocido como dec/hex 8 o oct 10 o \b
. Todo lo que está haciendo es mover el cursor; toma este ejemplo:
$ printf 'bravo\10\10X'
braXo
Hemos movido el cursor hacia atrás 2, pero solo escribimos sobre una letra, la v
. No escribimos sobre el o
, por lo que permanece.Si desea deshacerse del resto de las letras, debe sobrescribirlas con algo, generalmente un carácter de espacio:
$ printf 'bravo\10\10X '
braX
Aquí hay una solución alternativa:
sed -re ':b; s,[^\x08]\x08,,g; tb'
:b
:Etiquetab
s,[^\x08]\x08,,g
:Empareje un carácter de retroceso que no sea -con un carácter de retroceso y elimine ambos tb
:Si la directiva anterior s
hizo algo, regrese a la etiquetab