Это множество команд, выполняющих те же действия, что и только одна команда.
Я не знаю, как отформатирован "listener.ora", но строка ниже должна работать нормально, самое большее с небольшими изменениями.
sed -rn '/PORT/ s/.*([0-9]{4}).*/\1/p' /ora$sid/dbs/listener.ora
-r
для регулярного выражения
-n
для подавления автоматической печати
/ PORT /
, чтобы найти строку, содержащую PORT
s /
для замены
/ p
, чтобы напечатать отредактированные строки
Используйте голову или хвост, чтобы получить одно или другое значение.
$PORT0=(sed -rn '/PORT/ s/.*([0-9]{4}).*/\1/p' /ora$sid/dbs/listener.ora | head -1)
Или, если вы хотите и то, и другое:
grab_port () { sed -rn '/PORT/ s/.*([0-9]{4}).*/\1/p' /ora$sid/dbs/listener.ora ; } $PORT0=$(grab_port|head -1) $PORT1=$(grab_port|tail -1)
Теперь давайте посмотрим на вашу строку:
read -p "Maquina : " maquina; read -p "SID : " sid; ssh ora$sid@`echo $maquina` "port=$(cat /ora$sid/dbs/listener.ora|grep PORT|sed 's/.*PORT.*\([0-9]\{4\}\)\(.*\)/\1/ ' | head -1)| echo $port"
Часть, которая начинается с «port =
, заканчивается на | echo $ port»
, передавая результат своей собственной переменной самому себе ... не то, что вы хотите здесь делать. Изменить: не говоря уже о том, что он даже не запускает команду или не создает переменную. Просто он построен неправильно.
Если вы установите переменную порта раньше, это тоже станет проще.
read -p "Maquina : " maquina; read -p "SID : " sid; ssh ora$sid@`echo $maquina` "$PORT0"
вы можете решить эту ошибку, перейдя в php Extensions и отключив mysqli, а затем включив nd _mysqli. Удачи