2015-01-29 4 views
1

Я могу запустить bash на удаленном доме должным образом. У меня TCL установлен на удаленном хосте, но я не могу запустить TCL. Когда я запускаю этот скрипт, я не получаю никаких ошибок.Bash скрипт не работает tclsh

#!/bin/bash 
ssh [email protected] << EOF 
echo "Connected"; 
echo "CD TO ~"; 
cd ~; 
echo "Create text file"; 

script=' 
     set data "This is some test data.\n" 
     set filename "test.txt" 
     set fileId [open $filename "w"] 
     puts -nonewline $fileId $data 
     close $fileId 
exit 0' 

tclsh << HERE 
$script 
echo "Exit"; 

exit 
EOF 
+1

Кстати, вам также не хватает «ЗДЕСЬ». Предположительно, это должно быть непосредственно перед «эхом» Exit ». Тот, который вы не хотите процитировать, потому что вы используете этот heredoc как эквивалент POSIX-sh для herestring. –

+0

Спасибо @CharlesDuffy Все отлично работает сейчас: D – Ryahn

ответ

5

Heredocs расширить переменные внутри них по умолчанию, так что ваш [open $filename "w"] изменяется на open "w"] (и другие подобные изменения в другом месте), если у вас есть filename переменную экспортированный в вашем внешнем скрипте. Если вы не хотите, чтобы это расширение произошло, процитируйте ваше сигье:

ssh [email protected] <<'EOF' 

script='content' 

# intentionally not quoting this sigil, since in this case expansion is desired 
tclsh <<HERE 
$script 
HERE 

EOF 
+0

И его всегда самое простое из – Ryahn

+0

Я думаю, что в этот момент легче начать использовать отдельные файлы для вещей. Все, что есть в одном, все очень хорошо, но смута неизбежно появляется через некоторое время ... –

Смежные вопросы