Да, можно просто использовать echo -e
echo -e "lcd /home\ncd /myhome\nget file" | sftp user@host
Эксперимент - замена 'делает' с 'истинным' и 'ложным' (это команды, которые не делают ничего кроме возвратить подразумеваемое состояние), и попытайтесь понять, почему Вы получаете результаты, которые Вы делаете.
править: Вот вид эксперимента, который я имею в виду:
for cmd in true false ; do
printf "\n%s\n" $cmd
$cmd && echo "1 Success" || echo "1 Fail"
$cmd || echo "2 Fail" && echo "2 Success"
$cmd || echo "3 Success" && echo "3 Fail"
done
но для делают, необходимо узнать то, что возвращает значения версию, делают, Вы использовать возвраты - вот выборка от того, что я выполняю:
СТАТУС ВЫХОДА
GNU делает выходы с состоянием нуля, если все make-файлы были успешно проанализированы и никакие цели, которые были созданы отказавшие.
Состояние каждый будет возвращен, если флаг-q использовался, и сделайте, решает, что цель должна быть восстановлена.
Состояние два будет возвращено, если с какими-либо ошибками встретились.
и сценарий с подобным намерением, которое обрабатывает те возвращаемые значения:
for cmd in true false ; do
# make;
$cmd
status=$?;
case "$status" in
0) echo 'all makefiles parsed, no builds failed'; ;;
1) echo 'target needs to be rebuilt'; ;;
2) echo 'error(s) in make'; ;;
*) echo "make returned unknown status: $status"; ;;
esac;
done
return $status