2013-12-26 5 views
1

Я хочу, чтобы извлечь прилагаемую ISCSI устройство удаленного компьютераВыполнить readlink на удаленной машине

dev_by_path="/dev/disk/by-path/ip-10.1.1.240:3260-iscsi-iqn.2013-12.com.ryussi:swift1-lun-0" 

DEVICE=`ssh -i key.pem [email protected] 'bash -s' << 'ENDSSH' 
basename $(readlink $dev_by_path) 
ENDSSH` 

Это дает ошибку:

readlink: missing operand 
Try `readlink --help' for more information. 
basename: missing operand 
Try `basename --help' for more information 

Однако если я

DEVICE=`ssh -i key.pem [email protected] 'bash -s' << 'ENDSSH' 
basename $(readlink "/dev/disk/by-path/ip-10.1.1.240:3260-iscsi-iqn.2013-12.com.ryussi:swift1-lun-0") 
ENDSSH` 

то он успешно выполняется и echo $DEVICE дает sda. Как это выполнить.

ответ

1

При цитировании строки, которая заканчивается «здесь документ», вы отключили подстановку для переменных, содержащихся в ней. Ваша переменная $ dev_by_path определена на локальной стороне, а не в удаленно исполняемой оболочке. Итак, вы хотите расширить это до выполнения команды ssh.

DEVICE=`ssh -i key.pem [email protected] 'bash -s' <<ENDSSH 
basename $(readlink $dev_by_path) 
ENDSSH` 
+0

Вот что я сделал: 'cmd_file = Mktemp эхо "базовое имя \ $ (readlink $ dev_by_path)"> $ cmd_file DEVICE =' 'SSH -i $ STORAGE_KEY.pem -oStrictHostKeyChecking = нет -oUserKnownHostsFile =/DEV/null root @ $ storage_ip 'bash -s' <$ cmd_file' – Capricorn