Параметр -i
в sudo пытается создать оболочку входа в систему, которая, в свою очередь, запускает оболочку, выбранную пользователем. Вы установили это на / bin / false
в вашем / etc / passwd
:
$ grep userB /etc/passwd
userB:x:Z08:WW9::/home/userB:/bin/false
Попробуйте запустить:
sudo -u userB ls
Если это работает, значит, все работает так, как вы его настроили. к. Если вам нужна интерактивная оболочка, используйте вместо нее -s
, которая не будет вызывать оболочку входа пользователя.
Если вам нужна полная оболочка для входа в систему, вы должны изменить оболочку пользователя на
sudo chsh -s /bin/bash userB
Используйте одинарные кавычки:
for i in '$test1' '$test2' '$test3'; do
echo "$i"
done
или, иначе, экранируйте знаки доллара обратной косой чертой:
for i in \$test1 \$test2 \$test3; do
echo "$i"
done
Значение for i in "$test1" "$test2" "$test3"
состоит в том, что:$i
будет содержать содержимое трех переменных test1, test2, test3 -, которое фактически содержит :1, 2, 3
Если вы хотите напечатать test1 , test2 и test3 , вы должны вызывать их без знака $
, т.е. фактическое имя, а не их значение
Следующий код (без $
перед переменными test1/2/3
напечатает то, что вы хотите:
test1="1"
test2="2"
test3="3"
for i in "test1" "test2" "test3"; do
echo "$i"
done ;
результат выполнения:
test1
test2
test3
Если вы действительно хотите сделать это, просто сделайте это:
#!/bin/bash
test1='1'
test2='2'
test3='3'
for v in "test1" "test2" "test3"; do
echo "The variable's name is $v"
echo "The variable's content is ${!v}"
done
Но вы, вероятно, предпочтете использовать массивы , а не имена динамических переменных, поскольку это может рассматриваться как плохая практика и затрудняет понимание вашего кода. Так что рассмотрите эту, гораздо лучше, форму:
#!/bin/bash
test[0]='1'
test[1]='2'
test[2]='3'
for ((i=0;i<=2;i++)); do
echo "The variable's name is \$test[$i]"
echo "The variable's content is ${test[$i]}"
done
кш93 или Баш:
$ test1=aa; test2=bb; test3=cc
$ for x in "${!test@}" ; do echo "$x" ; done
test1
test2
test3
(обратите внимание, что переменные раскрываются в лексическом порядке (, поэтому test10
стоит передtest2
)).