Reputation: 17266
I want to read a file into a variable. I can do this with a stdin redirection operator:
MYVAR=$(</some/file)
However, the file is a sysfs node and may error out. I'm also using set -o errtrace
and want to ignore the error if it happens, just getting an empty variable. I've tried the following but surprisingly it always gives an empty variable.
MYVAR=$(</some/file || true)
Why is it always empty?
I could use cat
:
MYVAR=$(cat /some/file 2>/dev/null || true)
but would like to know if it's possible without.
Upvotes: 3
Views: 1082
Reputation: 2845
The $(</file) syntax is a 'specific bash specialty'
If you change from that specific syntax, you just redirect into nothingness.
You either just use cat, or you wrap this specific syntax in a compound block:
{ MYVAR=$(</some/file); } 2>/dev/null
Upvotes: 2
Reputation: 50750
|| true
should be outside the command substitution.
MYVAR=$(</some/file) || true
Your attempt failed because $(<file)
is a special case, it doesn't work if there's anything else within the parantheses other than stdin redirection operator and the pathname.
Upvotes: 2