Имя пользователя отображается как root вместо пользователя, который вошел в систему?

Это работает, потому что read разбивает все на пробелы (IFS), поэтому, если var1 пуст или начинается с '#', пропустите его.

while read var1 var2 var3 var4; do
   case $var1 in
       ''|\#*) continue ;;         # skip blank lines and lines starting with #
   esac
   echo "var1: '$var1'"
   # stuff with var1, etc.
done < "${1:-default_config_file}"

Затем ввод должен быть перенаправлен в цикл, а не в список команд while . "$ {1: -default_config_file}" расширяется до первого параметра командной строки, если не пуст, в противном случае расширяется до default_config_file , вы также можете использовать расширение переменных и т. Д. В строке значения по умолчанию .

Поскольку вы заинтересованы в минимизации предварительной обработки, я думаю, что это эквивалентно, но также удаляет все комментарии:

while read line; do
    echo "${line%%#*}" | {
        read var1 var2 var3 var4
        [ -z "$var1" ] && continue
        # stuff with var1, etc.
        for i in 1 2 3 4; do eval echo "\"var$i: \$var$i\""; done  #debug only!
    }
done < "${1:-default_config_file}"

Здесь используется функция обработки подстроки расширения параметров оболочки. $ {line %% # *} расширяется до исходного значения строки , за исключением первого # и всего после него удаляется. Загрузите это в var1-4 и продолжайте как обычно. Тест для continue сокращается, потому что теперь нам нужно проверять только пустую строку, а не # .

1
09.03.2019, 15:26
2 ответа

Ах, это просто. Ваш jenkinsпользователь определен в /etc/passwdследующим образом:

jenkins:x:996:993:Jenkins Automation Server:/var/lib/jenkins:/bin/false

Видите последнюю запись, в которой говорится /bin/false? Для пользователя jenkins не определена допустимая оболочка, поэтому сеанс немедленно завершается — и вы возвращаетесь обратно к корневой оболочке, с которой вы начали.

5
27.01.2020, 23:15

/bin/false поскольку оболочка входа пользователя не позволяет пользователю войти в систему обычными средствами. Вы не хотите менять это, так как это мера безопасности. Просто попросите другую оболочку при переключении на целевого пользователя:

sudo su -s /bin/bash jenkins

Это если вашему действительно нужно использовать сеанс интерактивной оболочки в качестве jenkinsпользователя. Поскольку у пользователя нет реальной оболочки входа в систему, кажется, что вы не должны использовать этого пользователя в интерактивном режиме во время нормальной работы.

0
27.01.2020, 23:15

Теги

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