English 中文(简体)
Dynamically building a command in bash
原标题:

I am construcing a command in bash dynamically. This works fine:

COMMAND="java myclass"
${COMMAND}

Now I want to dynamically construct a command that redirectes the output:

LOG=">> myfile.log 2>&1"
COMMAND="java myclass $LOG"
${COMMAND}

The command still invokes the java process, but the output is not redirected to myfile.log

Additionally, if I do:

BACKGROUND="&"
COMMAND="java myclass $BACKGROUND"
${COMMAND}

The command isn t run in the background.

Any clues on how to get the log redirect, and background bits working? (bash -x shows the commands being constructed as expected)

(In reality, unlike this example, the values of LOG and BACKGROUND are set dynamically)

最佳回答

It doesn t work because quotes disable the special meaning of > and &. You must execute the commands which implement these features of the shell.

To redirect, call exec >> myfile.log 2>&1 before the command you want to log.

To run a program in the background, use nohup (nohup cmd args...).

问题回答

You could do it with the eval command:

eval ${COMMAND}

eval does what you want.

#!/bin/bash

CMD="echo foo"
OUT="> foo.log"
eval ${CMD} ${OUT}


CMD="sleep 5"
BG="&"
eval ${CMD} ${BG}




相关问题
What does it mean "to write a web service"?

I just asked a question about whether it was possible to write a web-page-checking code and run it from free web server, and one supporter answered and said that it was possible only if I run "a web ...

How can I use exit codes to run shell scripts sequentially?

Since cruise control is full of bugs that have wasted my entire week, I have decided the existing shell scripts I have are simpler and thus better. Here is what I have so far svn update /var/www/...

Dynamically building a command in bash

I am construcing a command in bash dynamically. This works fine: COMMAND="java myclass" ${COMMAND} Now I want to dynamically construct a command that redirectes the output: LOG=">> myfile.log ...

Why does Scala create a ~/tmp directory when I run a script?

When I execute a Scala script from the command line, a directory named "tmp" is created in my home directory. It is always empty, so I simply deleted it without any apparent problem. Of course, when I ...

Ivy, ant and start scripts

I have a project that uses ant to build and ivy for dependencies. I would like to generate the start scripts for my project, with the classpath, based on the dependencies configured in Ivy, ...

热门标签