Checking XCOPY Exit Value in Cygwin Bash

Igor Peshansky pechtcha@cs.nyu.edu
Sun Aug 6 16:39:00 GMT 2006


On Sun, 6 Aug 2006, Shane wrote:

> Hi all,

Hi.  <http://cygwin.com/acronyms/#PCYMTWLL>.  Reading the one-line below
was extremely painful in the web archives.  See for yourself:
<http://cygwin.com/ml/cygwin/2006-08/msg00169.html>.

>        I am writing a automated build script for my project that will be
> run under cygwin. I will copy my updated source files to the build
> directory and if there are updated files, the executables will be built.
> To copy the source files, I had to use XCOPY since the directory
> structure should be preserved in the destination directory also.

Nope, you didn't have to.  Something like

(cd "$2/.." && find "$2" -name "*.$1" | tar cfT - -) | tar xfC - "$3"

would do the job of "XCOPY /S" using POSIX means.

> To copy only the updated files, I used the /D switch for XCOPY.

If you go POSIX, you can use the --keep-newer-files tar option.

> Now since I want
> to execute the source compile only if files in the build directory have
> been updated, I have to use the exit codes of XCOPY inside the script. I
> tried checking the value of $! after executing XCOPY but it didnt work.

Of course it didn't.  Please read a good bash tutorial, or the "Special
Parameters" section of the bash manpage.

> I couldn't find a solution in the internet too.  Currently I am piping
> the standard output to a file and checking if the number of files copied
> is 0 or not. But I think this is not an elegant solution. This is what I
> am doing now.
>
> [script]
> copied=false
> # Helper Function
> copy_files()
> {
>     echo copying *.$1 files in $2 to $3\\$2
>     xcopy /DSYI $2\\*.$1 $3\\$2 | tee copy.log
>
>     while read amount  ; do
>         if [ ${amount::1} != "0" ]; then
>             copied=true;
>         fi
>     done < copy.log
> }
> cd ../source
>
> copy_files h    . ..\\build
> copy_files c    . ..\\build
> copy_files cpp  . ..\\build
> rm -f copy.log
> ! $copied && echo "Files up-to-date. Skipping build" && exit 0
> cd ../build
> # Start the Build Process
> [/script]
>
> Can you please provide me a way of checking the XCOPY exit code:
> reference
> [http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/xcopy.mspx?mfr=true]
> within Bash?

It's just like checking any other exit code in bash: reference "man bash".
HTH,
	Igor
-- 
				http://cs.nyu.edu/~pechtcha/
      |\      _,,,---,,_	    pechtcha@cs.nyu.edu | igor@watson.ibm.com
ZZZzz /,`.-'`'    -.  ;-;;,_		Igor Peshansky, Ph.D. (name changed!)
     |,4-  ) )-,_. ,\ (  `'-'		old name: Igor Pechtchanski
    '---''(_/--'  `-'\_) fL	a.k.a JaguaR-R-R-r-r-r-.-.-.  Meow!

"Las! je suis sot... -Mais non, tu ne l'es pas, puisque tu t'en rends compte."
"But no -- you are no fool; you call yourself a fool, there's proof enough in
that!" -- Rostand, "Cyrano de Bergerac"

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list