简体   繁体   中英

Bash command substitution with a variable

I'm new to bash scripting and I've been learning as I go with a small project I'm taking on. However, I've run into a problem that I cannot seem to get past.

I have a variable that I need to include in a command. When ran directly in the shell (with the variable manually typed), the command returns the expected result. However, I can't get it to work when using a variable.

So, if I manually run this, it correctly returns 0 or 1, depending if it is running or not.

ps -ef | grep -v grep | grep -c ProcessName

However, when I try to embed that into this while clause, it always evaluates to 0 because it's not searching for the correct text.

while [ `ps -ef | grep -v grep | grep -c {$1}` -ne 0 ]
do
  sleep 5
done

Is there a way I can accomplish this? I've tried a myriad of different things to no avail. I also tried using the $() syntax for command substitution, but I had no luck with that either.

Thanks!

I think that instead of {$1} you mean "$1" . Also, you can just do pgrep -c "$1" instead of the two pipes.

In addition, there's also no need to compare the output of grep -c with 0 , since you can just see if the command failed or not. So, a much simplified version might be:

while pgrep "$1" > /dev/null
do
    sleep 4
done

You should really use -C with ps rather than the messy pipes if you're using the full process name. If you're interested in substring matching, then your way is the only thing I can think of.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM