Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Running a Bash script over ssh

Tags:

I'm trying to write a Bash script that will SSH into a machine and create a directory. The long-term goal is a bit more complicated, but for now I'm starting simple. However, as simple as it is, I can't quite seem to get it. Here's my code:

#!/bin/bash ssh -T [email protected] <<EOI  # Fix "TERM environment variable undefined" error. TERM=dumb export TERM  # Store todays date. NOW=$(date +"%F") echo $NOW  # Store backup path. BACKUP="/backup/$NOW" [ ! -d $BACKUP ] && mkdir -p ${BACKUP} echo $BACKUP  exit EOI 

It runs without any explicit errors. However, the echoed $NOW and $BACKUP variables appear empty, and the /backup directory is not created. How do I fix this?

like image 585
Cerin Avatar asked Mar 03 '10 19:03

Cerin


People also ask

Can I SSH in a bash script?

Bash script SSH is a common tool for Linux users. It is needed when you want to run a command from a local server or a Linux workstation. SSH is also used to access local Bash scripts from a local or remote server.

How do I run a script on a remote host?

To run a script on one or many remote computers, use the FilePath parameter of the Invoke-Command cmdlet. The script must be on or accessible to your local computer. The results are returned to your local computer.


2 Answers

The shell on the local host is doing variable substitution on $NOW and $BACKUP because the "EOI" isn't escaped. Replace

 ssh [email protected] <<EOI 

with

 ssh [email protected] <<\EOI 
like image 62
Steve Emmerson Avatar answered Oct 13 '22 08:10

Steve Emmerson


The variables are being evaluated in the script on the local machine. You need to subsitute the dollar signs with escaped dollar signs.

#!/bin/bash ssh -T [email protected] <<EOI  # Fix "TERM environment variable undefined" error. TERM=dumb export TERM  # Store todays date. NOW=\$(date +"%F") echo \$NOW  # Store backup path. BACKUP="/backup/\$NOW" [ ! -d \$BACKUP ] && mkdir -p \${BACKUP} echo \$BACKUP  exit EOI 
like image 25
hbar Avatar answered Oct 13 '22 06:10

hbar