0

in a bash script i try to do:

ssh -n $username@server2 "rm ${delete_file}"

but always get the error:

rm: missing operand

when I

> echo $delete_file
> /var/www/site/myfile.txt

I get the correct path.

What am i doing wrong?

0

1 Answer 1

1

Could it be that in your case, $delete_file is set on the remote host and not on your current machine? If you want $delete_file to be expanded on the remote side (i.e., after ssh'ing into server2), you have to use single quotes:

ssh -n $username@server2 'rm ${delete_file}'

Other than that, do you set the value of delete_file in the same script (before ssh'ing), or before invoking your script? If latter is the case, it can't work: Variables are not propagated to scripts called by the current script/session. You could do the following about it:

delete_file=<your-value> ./ssh-script

or:

delete_file=<your-value>
export delete_file
./ssh-script

As it turns out this last option was the problem, let me elaborate on best practices: Better than setting environment variables would be the usage of positional parameters.

#!/bin/bash
# $1: file to delete
delete_file=${1:?Missing parameter: which file for deletion?}
ssh -n $username@server2 "rm ${delete_file}"

Usage of the script is now as simple as:

./ssh-script <your-file-for-deletion>

This way, you don't have to remember which variable is exactly expected by the script when calling it - simply call the script with a positional parameter.

As a bonus, the example uses parameter expansion to check for not-set or empty parameters:

delete_file=${1:?Missing parameter: which file for deletion?}

Whenever $1 happens to be unset or empty, the scripts exits immediately with exit code 1 and prints given message to stderr.

Sign up to request clarification or add additional context in comments.

3 Comments

no, sorry. variable is set on local host, and is then send via ssh to remote host
I've updated my answer.
Added additional notes about best practices.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.