Cody
Cody

Reputation: 101

Assign full text file path to a variable and use variable as file path in sh file

I am trying to create a shell script for logs and trying to append data into a text file. I have write this sample "test.sh" code for testing:

#!/bin/sh -e
touch /home/sample.txt

SPTH = '/home/sample'.txt

echo "MY LOG FILE" >> "$SPTH"
echo "DUMP started at $(date +'%d-%m-%Y %H:%M:%S')" >> /home/sample.txt
echo "DUMP finished at $(date +'%d-%m-%Y %H:%M:%S')" >> /home/sample.txt

but in above code all lines are working correct except one line of code i.e.

echo "MY LOG FILE" >> "$SPTH"

It is giving error:

test.sh: line 6: : No such file or directory

I want to replace this full path of file "/home/sample.txt" to variable "$SPATH".

I am executing my shell script using

sh test.sh

What I am doing wrong.

Upvotes: 0

Views: 3225

Answers (2)

Inian
Inian

Reputation: 85550

Variable assignments in bash shell does not allow you to have spaces within. It will be actually interpreted as command with = and the subsequent keywords as arguments to the first word, which is wrong.

Change your code to

SPTH="/home/sample.txt"

That is the reason why SPTH was not assigned to the actual path you intended it to have. And you have no reason to have single-quote here and excluding the extension part. Using it fully within double-quotes is absolutely fine.

Upvotes: 2

cdarke
cdarke

Reputation: 44344

The syntax for the command line is that the first token is a command, tokens are separated by whitespace. So:

SPTH = '/home/sample'.txt

Has the command as SPTH, the second token is =, and so on. You might think this is daft, but most shells behave like this for historical reasons.

So you need to remove the whitespace:

SPTH='/home/sample'.txt

Upvotes: 0

Related Questions