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?
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.
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.
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
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With