awk scripts in windows with MinGW - batch-file

We have an old legacy system that uses awk script for the deploy. I want to make minimum changes in it. We used to work with Cygwin and recently we've replaced it to MinGW.
Long story short, the script uses the system() command in order to run a cmd batch file like this:
system("cmd /c addVersion.bat " f ".map " f "." major "." minor ".map " f)
(I know complex and not ideal, but again I want minimum changes in that thing)
With Cygwin this command used to run the addVersion.bat and print the output to the console. with MinGW it only opens a new instance of CMD and does nothing.
we are working on windows10 with MinGW and Msys.
I looked a lot on the internet and found nothing. (guess cause I didn't know the right keywords in order to find a relevant solution)
if anyone has any idea or suggestion please let me know.

Related

Windows BAT script for cp alias produces error

I wrote a file called cp.bat and the content of this file is: DOSKEY cp=COPY $* copy. I saved this file in c:\users\myname\aliases. I also added this path to my environment so cmd can execute it.
When I now type cp in my cmd the output is a strange character for the c in cp.
I need this script to work because I want to install chicken scheme eggs on my machine, but the chicken-install command executes multiple cp commands and those are not recognized in the cmd.
I also tried to alter the build script of the eggs, but it gets newly generated everytime I call the chicken-install command.
It would also help if someone could explain me how to install chicken eggs on a windows machine correctly. I feel this workaround shouldn't be necessary. Thanks in advance.
Like Magoo mentioned:
In all probability, your editor is the root of your problem. Batch files should be created in strict ANSI format using a text-editor, not a word-processor. Notepad is barely adequate; Notepad++ is far better - I use Editplus
The encoding was messed up and it was set to UTF-8-BOM, so I changed it to ANSI and it worked flawlessly.
If you're using CHICKEN 5, it should not be emitting cp commands; it should emit batch files which use the builtin Windows commands only if you're using the mingw platform target. Have you used the PLATFORM=mingw option with every make invocation?
If you're using the mingw-msys (or cygwin) platform, then it will be emitting UNIX style commands.

How to use yarpgen random C program generator?

I am new here.
Could anyone help me, on how to use yarpgen to generate a random c program.
I tried running the run_gen.py script that I saw in the yarpgen readme.
But, I got a warning and an error like this:
Warning: please set YARPGEN_HOME envirnoment variable to point to test generator path, using C:\Users\..\Python\Python36-32\yarpgen-master for now
and
File C:\Users\..\Python\Python36-32\yarpgen-master\yarpgen wasn't found
Any help would be much appreciated.
Thanks in advance !
The warning very likely points to the source of the problem, run_gen does not know where the other parts of yarpgen are installed.
First, note down the directory you installed/copied yarpgen to.
Then open a command shell. Type this:
cd <where run_gen.py is>
set YARPGEN_HOME=<the path you just noted down>
run_gen.py
If this works, you can write a batch script, that contains the set YARPGEN_HOME=... line and then calls run_gen.py. If the directory where run_gen.py is located is not on your PATH environment variable, call run_gen.py with the full absolute path in the batch script:
set YARPGEN_HOME=<the path to yarpgen>
python3 <absolute_path_to>\run_gen.py
Then you can call your batch script.
You may have to adjust the python3 command depending on the executable Python 3 installed on your machine (it may be just python on Windows).
When I tried this after building with cygwin, I noticed that I had to rename yarpgen.exe to yarpgen to make it work.

Cygwin bash.exe cannot run make, works in cmd.exe

I am having issues running any make command in a Cygwin bash terminal. The following is the error that is returned.
"'ygdrive' is not reconized as an internal or external command, operable program or batch file"
However I am able to properly run the make file using cmd.exe, any help would be appreciated.
Thanks Eric E
Looks like you are referencing a path in some recipe with \cygdrive\<letter>\.... bash interprets a single backslash as an escape character and therefore ignores the c directly following it.
Solutions:
If you want the Makefile to be portable to Unix systems, just write forward slashes in paths like this /cygdrive/<letter>/....
If you instead want the Makefile to be compatible with cmd, too, use double backslashes like \\cygdrive\\<letter\\... -- both bash and cmd will understand this.
In any case, such a path should be in a make variable because it is probably completely different on another machine.
The above solution by Felix might be the answer for others, however the solution for my problem was removing "SHELL=C:/Windows/System32/cmd.exe" from the top of my Makefile..

Running a shell script through Cygwin on Windows

I have a bunch of shell scripts that used to run on a Linux machine. Now, we've switched over to Windows, and I need to run these scripts there. I have Cygwin installed, but is there a way to make the script run using Cygwin, but the call is made from Windows batch?
Sure. On my (pretty vanilla) Cygwin setup, bash is in c:\cygwin\bin so I can run a bash script (say testit.sh) from a Windows batch file using a command like:
C:\cygwin\bin\bash testit.sh
... which can be included in a .bat file as easily as it can be typed at the command line, and with the same effect.
One more thing - if You edited the shell script in some Windows text editor, which produces the \r\n line-endings, cygwin's bash wouldn't accept those \r. Just run dos2unix testit.sh before executing the script:
C:\cygwin\bin\dos2unix testit.sh
C:\cygwin\bin\bash testit.sh
If you have access to the Notepad++ editor on Windows there is a feature that allows you to easily get around this problem:
Open the file that's giving the error in Notepad++.
Go under the "Edit" Menu and choose "EOL Conversion"
There is an option there for "UNIX/OSX Format." Choose that option.
Re-save the file.
I did this and it solved my problems.
Hope this helps!
Read more at http://danieladeniji.wordpress.com/2013/03/07/microsoft-windows-cygwin-error-r-command-not-found/
Just wanted to add that you can do this to apply dos2unix fix for all files under a directory, as it saved me heaps of time when we had to 'fix' a bunch of our scripts.
find . -type f -exec dos2unix.exe {} \;
I'd do it as a comment to Roman's answer, but I don't have access to commenting yet.
The existing answers all seem to run this script in a DOS console window.
This may be acceptable, but for example means that colour codes (changing text colour) don't work but instead get printed out as they are:
there is no item "[032mGroovy[0m"
I found this solution some time ago, so I'm not sure whether mintty.exe is a standard Cygwin utility or whether you have to run the setup program to get it, but I run like this:
D:\apps\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico bash.exe .\myShellScript.sh
... this causes the script to run in a Cygwin BASH console instead of a Windows DOS console.
If you don't mind always including .sh on the script file name, then you can keep the same script for Cygwin and Unix (Macbook).
To illustrate:
1. Always include .sh to your script file name, e.g., test1.sh
2. test1.sh looks like the following as an example:
#!/bin/bash
echo '$0 = ' $0
echo '$1 = ' $1
filepath=$1
3. On Windows with Cygwin, you type "test1.sh" to run
4. On a Unix, you also type "test1.sh" to run
Note: On Windows, you need to use the file explorer to do following once:
1. Open the file explorer
2. Right-click on a file with .sh extension, like test1.sh
3. Open with... -> Select sh.exe
After this, your Windows 10 remembers to execute all .sh files with sh.exe.
Note: Using this method, you do not need to prepend your script file name with bash to run

What DOS script command "gets" a value from the console?

This is very basic, and I am annoyed that I can't remember, but it has been a long time.
I want to write a MSDOS batch command script that gets a value from the console to use in the script. I can't remember which command it is, and the reference I have relies upon one knowing the name of the command. Which I don't remember.
Can someone unlock this issue for me?
OK, it isn't really DOS, it is a batch command file in Windows XP.
set /p name= your age?
Im not sure but. name is the variable assigned user input. Your age? is message displayed when asking for input.
Believe it or not, there really wasn't any effective way .
Here are a few (very ugly) workarounds, including "COPY CON":
http://www.robvanderwoude.com/userinput.php
Here's a very simple menu system:
http://www.dostips.com/DtTipsMenu.php#Batch.Menu
Note: the syntax may or may not work depending on your DOS version.
Q:
Is this really "DOS" (as in MS-DOS), or a command prompt on a modern, Windows OS?
If the latter, you can do just about anything you want with Windows scripting or Powershell.

Resources