Используйте sshpass
$ sudo apt-get install sshpass
Создайте свой сценарий
#!/bin/bash
user="user"
psswd="password"
port="22"
host="domain.com"
sshpass -p $psswd ssh $user@$host -p $port
Выполните
$ bash connect_script.bash
Welcome to Ubuntu ..... LTS (.......)
* Documentation: https://help.ubuntu.com/
New release '14.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
You have new mail.
Last login: Thu Jan 21 11:39:35 2016 from x.x.x.x
user@host:~$
Не уверен, что полностью следую кавычкам в вашем скрипте и тому, что вы хотите, чтобы команда cat
делала, поскольку она читается с не перенаправленного -стандартного ввода, т. е. предположительно с вашей клавиатуры. Как насчет чего-то вроде
for i in `seq 1 22`
do cat <<- EOF > loc_chr${i}.r
"a <- read.delim("file${i}.txt", header=T, check.names=FALSE);
library("splitstackshape");
loc1 <- cSplit(a, "V1", ":");
rm(a);
out <- cbind.data.frame(loc1$V1_1, loc1$V1_2);
write.table(out, "out_file${i}.txt", sep="\t", row.names=F, quote=F)"
EOF
done
Ваш первый пример кода не работает, потому что он имеет > build_file${i}.r
в своей собственной строке, которая ничего не перенаправляет в 20 файлов. Добавьте > build_file${i}.r
в конец вашего echo
.
Ваш второй пример кода не работает из-за cat
внизу. Вы не предоставляете то, что хотите cat
объединить, поэтому он ожидает ввода.
Вы должны удалить строку cat
и добавить > loc_chr${i}.r
в конец вашего echo
.
for i in `seq 1 22`; do
echo "a <- read.delim("file${i}.txt", header=T, check.names=FALSE);
library("splitstackshape");
loc1 <- cSplit(a, "V1", ":");
rm(a);
out <- cbind.data.frame(loc1$V1_1, loc1$V1_2);
write.table(out, "out_file${i}.txt", sep="\t", row.names=F, quote=F)" > loc_chr${i}.r
done