how to proceed when curl is finished


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting how to proceed when curl is finished
# 1  
Old 08-21-2012
how to proceed when curl is finished

I have a script which uses cli curl to download the source code of a webpage and then tests if a specific string exists in the source.

The problem is that the website has a slow response, so the eval expression hasn't completed when the test starts.

The test returns a negative, and the curl completes right after the test and changes the source.html. The test should have been positive, but ran too soon.

How do I make the test wait until curl has finished? Do I have to sleep for a few seconds, or is there another way?

Code:
string=$(echo "curl -d "'"'$datastring'"'" -b cookie.txt -c cookie.txt -L "$url)
eval $string > source.html
teststring=$(awk '/text/' source.html)

The curl progress line is still showing after the test has been completed.

---------- Post updated at 11:54 PM ---------- Previous update was at 11:50 PM ----------

If I put
Code:
 > source.html

into the string it still doesn't work. The script has already completed when I receive the source a few seconds later.

Code:
string=$(echo "curl -d "'"'$datastring'"'" -b cookie.txt -c cookie.txt -L "$url" > source.html") 
eval $string 
teststring=$(awk '/text/' source.html)

# 2  
Old 08-21-2012
Perhaps the URL contains a ampersand (&) character causing the curl to be run in the background.

Why do you need to do an eval instead of invoking curl directly?

For debuging purposes try printing the command before you eval it :

Code:
string=$(echo "curl -d "'"'$datastring'"'" -b cookie.txt -c cookie.txt -L "$url)
printf "%s\n" "$string"
eval $string > source.html
teststring=$(awk '/text/' source.html)

This User Gave Thanks to Chubler_XL For This Post:
# 3  
Old 08-21-2012
I have to pass variables like post data to curl, and I don't know any other way than constructing a string and then eval it.

---------- Post updated at 12:14 AM ---------- Previous update was at 12:10 AM ----------

But yes, it does contain an ampersand. Does that make it run in the background?
# 4  
Old 08-21-2012
So is it just $datastring that contains $variables that you need to expand?

Edit: Yes, the expanded $url variable will need to be quoted to ensure the shell dosn't intrepret anything within it. Preferablly with single quotes.

Try:
Code:
string=$(echo "curl -d "'"'$datastring'"'" -b cookie.txt -c cookie.txt -L "\'$url\')

This User Gave Thanks to Chubler_XL For This Post:
# 5  
Old 08-21-2012
Quote:
Originally Posted by Chubler_XL
So is it just $datastring that contains $variables that you need to expand?
yes, just $datastring



Now I have found a solution with your help. I put double quotes around the url, to prevent it from running in the background. Smilie

Code:
string=$(echo "curl -d "'"'$datastring'"'" -b cookie.txt -c cookie.txt -L "\'$url\') 
eval $string > source.html 
teststring=$(awk '/text/' source.html)

---------- Post updated at 12:21 AM ---------- Previous update was at 12:18 AM ----------

By the way, do you or anyone else know an easier way to pass variables to curl?
# 6  
Old 08-21-2012
Double quotes aren't so good if URL contains a dollar sign ($), the shell will try and expand it.
This User Gave Thanks to Chubler_XL For This Post:
# 7  
Old 08-21-2012
Quote:
Originally Posted by Chubler_XL
Double quotes aren't so good if URL contains a dollar sign ($), the shell will try and expand it.
OK, thanks
Login or Register to Ask a Question

Previous Thread | Next Thread

8 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Script to Proceed to the Next IP if the current IP hangs

Hi there, Say I have a list of IPs, I am running scripts on them. If the process hang. I want to continue with the rest of the IPs. 10.11.1.1 10.11.1.2 10.11.1.3 10.11.1.4 10.11.1.5 10.11.1.6 <-- Process Hangs here 10.11.1.7 10.11.1.8 10.11.1.9 10.11.1.10 10.11.1.11 10.11.1.12 ... (11 Replies)
Discussion started by: alvinoo
11 Replies

2. Shell Programming and Scripting

How to timeout and proceed in perl?

I'm writing a small socket program (UDP) to communicate between two servers. Problem is, I dont know how to implement time out hence my script keeps on waiting for the peer response. #!/usr/bin/bash use IO::Socket::INET; $|=1; $socket=new IO::Socket::INET->new(LocalPort=>5001, ... (2 Replies)
Discussion started by: Arun_Linux
2 Replies

3. Web Development

Request to check:PHP help hw to proceed

Hi I am new to PHP. I have to changed a website design adn add certain features and lnks which shuld direct it towards other website. Can any body help me how to proceed. I have some already made templates to do this. I am conpletely new.. So, I have to first install Php from... (0 Replies)
Discussion started by: manigrover
0 Replies

4. Solaris

Zlogin -C with out user Interaction how to proceed?

Hi Guys, I have one requirement like if we run install.sh file it should have to create a zone and install oracle in that zone with out any user interaction. So the complete code should be automated. Almost 90% of the code I completed but i am having some doubts 1) After the zone creation... (1 Reply)
Discussion started by: vijaysachin
1 Replies

5. UNIX for Dummies Questions & Answers

Using exit status of GREP to proceed

Hi I have a script that carries out a "grep" command, and displays the output on screen. What I need to do is utilise the exit status of this grep, so that, for example, if it returns no entries, it asks the user if they want to set up a new user, and if the grep returns an entry, it states... (1 Reply)
Discussion started by: Great Uncle Kip
1 Replies

6. Shell Programming and Scripting

Need help for automating a task. How to proceed ?.

Dear friends, I am trying to prepare a shell script which do the following task. Being a beginner in scripting I need a bit of help from you all for shell script which does the following job. 1.Check for existence of a file in a shared directory (at some remote location ) once in a day ... (1 Reply)
Discussion started by: aarora_98
1 Replies

7. UNIX for Dummies Questions & Answers

How can i proceed on this (datecheck)

Hi, I want to bundle if statements The script which i created is if ]; then if ]; then now=`TZ=CST+24 date +%Y-%m-%d` nows=`TZ=CST+24 date +%Y-%m-%d` ; else ]; then now=`TZ=CST+48 date +%Y-%m-%d` nows=`TZ=CST+48 date +%Y-%m-%d` ; fi now=`TZ=CST+24 date +%Y-%m-%d` nows=`date... (2 Replies)
Discussion started by: gopskrish
2 Replies

8. Programming

I am porting Dll from NT to Unix, how should I proceed

I am porting Dll from Windows NT to Unix, Could any body pls guide me how should I proceed?? (3 Replies)
Discussion started by: Vipin
3 Replies
Login or Register to Ask a Question