'\r' added end of the script command
Matthew Harrington
This is my script:
#!/bin/bash
hd='pwd'
cd $hdWhen I try to run it, it fails with:
line 3: cd: $'pwd\r\r': No such file or directoryWhat is going on?
01 Answer
The \r issue suggests you have edited the script file on a Windows machine. Windows uses \r\n as the line terminator while Linux (and most other operating systems) use \n alone. When you edit a file in Windows, Windows will add \r to the end of the lines and that will break your scripts.
So, first remove the \r:
sed -i 's/\r//g' script.shThe next issue is that your script isn't doing what you think it is. Or what I imagine you think it is, since you didn't actually say. I am guessing that you think that hd='pwd' sets the variable $hd to the value returned by the command pwd. That isn't what's happening. You are simply setting the variable to the string pwd:
$ hd='pwd'
$ echo "$hd"
pwdTo use the output of a command as the value for a variable, you need to use var=$(command) or var=`command`:
$ hd=$(pwd)
$ echo $hd
/home/terdonSo your script should be:
#!/bin/bash
hd=$(pwd)
cd "$hd"In this case, however, you don't even need that. The current directory is already in a variable:
$ echo "$PWD"
/home/terdonSo you could also have done hd=$PWD. Or simply cd "$PWD".