Это не то, что вы хотите:
set FILEPATH1 $1
Tcl (и expect )не используют стиль оболочки -$1, $2,...
для доступа к аргументам командной строки. Вы хотите использовать глобальный список $argv
:
set FILEPATH1 [lindex $argv 0]
Кроме того, ваш призыв к возрождению неверен. sh
будет искать файл с именем «scp $FILEPATH1 $USER@$HOST :/destination/files». Вам не нужна оболочка для создания SCP:
spawn scp $FILEPATH1 $USER@$HOST:/destination/files
Откуда берутся USER и HOST? Являются ли они переменными среды? Если да:
spawn scp $FILEPATH1 $env(USER)@$env(HOST):/destination/files
И вы не ждете фактического завершения передачи перед завершением работы вашего скрипта. Сделай это:
expect password:
send "$pass\r"
set timeout -1
expect eof
Я предполагаю, что пароль запрашивается только один раз. Если вам нужно ввести его несколько раз, то
expect {
password: {
send "$pass\r"
set timeout -1
exp_continue
}
eof
}
Укажите путь к месту хранения нового архива, например. грамм. tar cvf "${dir_path}"/new_name.tar "$file_dir_name" -C "$dir_path"
.
Это предполагает, что каталог, соответствующий file_dir_name
, существует в dir_path
.