mimeopen -a 'picture.jpg'
This is what you need
It will give you output like this
Please choose an application
1) Shotwell Viewer (shotwell-viewer)
2) Firefox Web Browser (firefox)
3) Image Viewer (eog)
Given the file you show, you should be able to do:
(set -f ; IFS='
' ; env - $(cat /path/to/file) /path/to/your/program
)
If it doesn't work then it is only because you need to format your environment file first. Here's an example:
(set -f ; IFS='
' ; env - $(cat) printenv
) <<\ENV
variable1=value1
variable2=value2
variable3=value3 an$d s'om\e m"ore
ENV
###OUTPUT###
variable1=value1
variable2=value2
variable3=value3 an$d s'om\e m"ore
I at first thought you could do it through the shell - but it will probably set some of its own environment before calling your program. But I can at least demonstrate that the arguments are assigned correctly:
(set -f; IFS='
' ; env - $(cat) sh -c 'echo "$variable3"'
) <<\ENV
variable1=value1
variable2=value2
variable3=value3 an$d s'om\e m"ore
ENV
###OUTPUT###
value3 an$d s'om\e m"ore
Still, if you would prefer to source it, here's how you can using the shell:
(echo '$1'; cat; echo '$2') <<\ENV |\
env - sh -s -- 'set -a' printenv
variable1=value1
variable2=value2
variable3='value3 an$d s'\''om\e m"ore'
ENV
###OUTPUT###
PWD=/home/mikeserv/test
SHLVL=1
variable1=value1
variable2=value2
variable3=value3 an$d s'om\e m"ore
_=/usr/bin/printenv
Notice that I removed the $IFS
stuff - that's not necessary this way - but I did have to get specific about the quotes in the file. Here I'm essentially .dot
sourcing stdin
- reading the |pipe
as input - but you can use any file. I use set -a
before reading the input file to set the --allexport
option.
That is a result of using bash
's sh
- it adds $PWD
, $SHLVL
and $_
. With dash
it is a little better. And dash
doesn't add a bunch of exports either, so you can specify the -a
parameter on the command line:
(cat; echo '$1') <<\ENV |\
env - dash -sa -- printenv
variable1=value1
variable2=value2
variable3='value3 an$d s'\''om\e m"ore'
ENV
variable1=value1
variable2=value2
variable3=value3 an$d s'om\e m"ore
PWD=/home/mikeserv/test
Only $PWD
comes through.
Best Answer
Sometimes, when you start a program, it prints out some message. If you start it in background, the program may lock up until you bring it back to the foreground so that it can display its message. The solution is to redirect stdout and stderr so that the program can continue running in the background. One way to do this is:
The above creates a file in your home directory with whatever message
evince
wanted to display.If you are convinced that evince's messages are unimportant, you can discard them without creating a file:
After running either of the above commands, the shell should produce a message like
[1] 1234
and then a shell prompt should appear. As Graeme suggests, if the shell prompt does not appear, try pressing enter again.