Running Ubuntu 18.04 subsystem on Windows 10, but have also tried to do this on a Ubuntu 18.04 Google cloud virtual machine.
I’ve realised that baking my login credentials into my scripts is a rather dumb idea, not just for the security risks but because I’ll have to edit every script if I change my password…
I discovered that I should be able to have a file that contains my credentials and put them “inline” when I run my script by using “. file”, however when I run my script it just returns an error that the file isn’t found.
Using ls
on the directory I run the script from contains:
- test.sh
- credential
“credential” file contents
USER=<username> PWD=<password>
Current script for test.sh
#!/bin/bash set -eu DS=$(date "+%Y-%m-%d" -d "11 days ago") DE=$(date "+%Y-%m-%d" -d "1 day ago") . credential rm -f cookiejar curl /dev/null -s -S -L -f -c cookiejar 'https://url/auth/authenticate' -d name=$USER -d passwd=$PWD
Error Message
+ set -eu + date +%Y-%m-%d -d 11 days ago + DS=2020-01-05 + date +%Y-%m-%d -d 1 day ago + DE=2020-01-15 + account=465 + . credential test.sh: 9: .: credential: not found
I’ve tried messing around with the spaces between the “. credential” line of the script and tried to find out what I might be doing wrong online but haven’t been able to google search correctly to find a relevant answer.
Can someone confirm what I’m missing/ not aware of here or point me to documentation that might help? This is my first time trying to do something like this so apologies if this is a basic question.
Advertisement
Answer
.
uses path lookup to find the file named by its argument. Since the current working directory typically is not in your PATH
(nor should it), .
won’t find the file. Instead, use
. ./credential
to bypass PATH
lookup.
This isn’t really safe, though, because now you are restricted to running the script from the proper directory. Either put credential
in a directory on your PATH
, or use an absolute path to specify where credential
is located.