Это немного сложно из-за того, что Linux является «слабой системой». Избегайте этого, если можете.
Посмотрите этот вопрос о Serverfault .
Если проблемы ARP решены (трафик из SAN в eth1
), все, что вам нужно, это запись маршрутизации для SAN:
# with then SAN address being 1.2.3.4 and the eth1 address 1.2.3.5
ip route add 1.2.3.4/32 dev eth1 src 1.2.3.5
Команда чтения не игнорируется; он выполняет его и читает стандартный ввод. Затем строка echo "the name is $name
считывается (из стандартного ввода )и присваивается $name.
su myUser<<SESSION
set -x
echo -n \"Enter your name and press [ENTER]: \"
read name
someUser
echo \"the name is \$name\"
SESSION
выход:
+ echo -n '"Enter' your name and press '[ENTER]:' '"'
-n "Enter your name and press [ENTER]: "
+ read name
+ echo '"the' name is 'someUser"'
"the name is someUser"
Как правильно обнаружил Л. Скотт Джонсон , read
считывается со стандартного ввода. Стандартный ввод в оболочке, которая выполняется su
, связан с документом здесь -, поэтому read
считывает литеральную строку echo "the name is "
(, обратите внимание, что, поскольку документ здесь -не заключен в кавычки, $name
имеет уже был расширен до пустой строки или любого другого значения, которое оно имело в вызывающей оболочке ).
Вот то же самое, но с цитируемым здесь документом -и лишней строкой, выводящей снова $name
:
su username <<'SESSION'
set -x
echo -n "Enter your name and press [ENTER]: "
read name
echo "the name is $name"
echo "What I read was $name"
SESSION
Вывод будет
Password:
+ echo -n Enter your name and press [ENTER]:
Enter your name and press [ENTER]: + read name
+ echo What I read was echo "the name is $name"
What I read was echo "the name is $name"
Чтобы правильно это сделать, вы не можете read
читать со стандартного ввода. Вместо этого откройте новый файловый дескриптор как копию стандартного ввода и заставьте read
читать из него:
su username 3<&0 <<'SESSION'
set -x
echo -n "Enter your name and press [ENTER]: "
read name <&3
echo "the name is $name"
SESSION
Если оболочка другого пользователя bash
или ksh
, то read name <&3
можно заменить на read -u3 name
.
Обратите внимание, однако, что вы не можете ожидать, что переменная name
будет установлена в оболочке, вызывающей su
, поскольку дочерняя оболочка не может изменять переменные среды (и т. д. )родительской оболочки.