col выдает некорректный вывод

Обнаружена и исправлена проблема.

Был неправильный путь к каталогу на сервере NAS, я использовал путь для пользователя admin, который является полным путем, но поскольку пирог имеет доступ только к папке pi, то он просто «напрямую» подключается к этой папке.

-121--289243-

Если оболочка входа даже не запускается, вход в систему невозможен. Клиент отправляет последовательность на сервер, и для интерпретации последовательности требуется оболочка входа пользователя на сервере. Клиент не имеет пути указывать серверу «выполнить другую команду».

Это механизм безопасности: если оболочка пользователя ограничена тем, что он может сделать, то пользователь не может сделать ничего, что не позволяет.

Если вы заблокировали доступ ко всем учетным записям в системе, то вам придется использовать метод, который обходит обычные имена входа, например физический доступ или консоль восстановления.

Некоторые советы:

  • При обслуживании всегда держите корневую оболочку открытой и не закрывайте ее, пока не протестируете, что все работает.
  • Установите статически связанную оболочку на учетную запись с правами sudoer. Я не вижу какой-либо предварительной упаковки от Arch. Debian имеет несколько ; можно просто скопировать исполняемый файл и добавить его в /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» будет эхом.

2
12.06.2018, 01:32
2 ответа

^Hen 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

http://wikipedia.org/wiki/Backspace#%5eH

2
27.01.2020, 22:09

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 shizo algo, regrese a la etiquetab
0
27.01.2020, 22:09

Теги

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