I'm going to try my best to explain the question. Please don't hesitate to ask for clarification if needed.
Ultimately, I want
- to assign the output of a command to a variable while
- maintaining the possibility to check if the command was successful or not.
For the first part, normally, I would do something like this:
{
ls nonexistingfolder
} && {
echo "fine"
} || {
echo "error"
}
However, above code doesn't work, when I'm using export
to save the output to a variable:
{
export MESSAGE=$(ls nonexistingfolder)
} && {
echo "fine"
} || {
echo "error"
}
Above code will always print fine
.
I tried something with an if
statement:
export MESSAGE=$(ls notexistingfolder)
if [ -z "$MESSAGE" ] ; then echo "error" ; else echo "fine" ; fi
But above code won't work when the command succeeds without output (for example if ls
lists an empty folder):
export MESSAGE=$(ls emptyfolder)
if [ -z "$MESSAGE" ] ; then echo "error" ; else echo "fine" ; fi
Above code falsely prints error
.
So I thought about defining an "error value" for $MESSAGE
:
export MESSAGE=$(ls notexistingfolder || echo "error")
if [ "$MESSAGE" = "error" ] ; then echo "error" ; else echo "fine" ; fi
Above code prints error
as it should.
export MESSAGE=$(ls emptyfolder || echo "error")
if [ "$MESSAGE" = "error" ] ; then echo "error" ; else echo "fine" ; fi
Above code prints fine
as it should.
However, there is the low possibility that the command will succeed and return a string which matches my "error value" exactly (for example if ls
lists a folder which contains a folder called error
):
export MESSAGE=$(ls folderwitherrorfolder || echo "error")
if [ "$MESSAGE" = "error" ] ; then echo "error" ; else echo "fine" ; fi
Above code will falsely print error
.
What can I do? Thank you! :-)
Aucun commentaire:
Enregistrer un commentaire