Search code examples
bashcygwin

Cygwin BASH script file - unwanted single quotes added automatically to constant string - how to prevent


I have this BASH script which I run in a Cygwin terminal instance via the command

bash -f myfile.sh

All I need it to do is delete all *.txt files in the Cygwin /home/user directory.

#!/bin/bash

set -x

rm -rf /home/user/*.txt

This does not work, running the file (I only added "set -x" to debug when it started failing) shows

+ rm -rf '/home/user/.txt*

The problem is literally that I specify in my code in the Cygwin BASH script

rm -rf /home/user/*.txt

without any quotes, but when ran in Cygwin terminal in the BASH script, it resolves to

rm -rf '/home/user/*.txt'

e.g. single quotes are added by Cygwin BASH.

I've scoured other posts where the responses indicate the quotes are only there due to "set -x" formatting the output to show a unitary string, but without "set -x" in the script file the rm command still fails, e. g. the rm command string IS still quoted (or some other mangling is applied?), and therefore the rm line in the script does not work.

I managed to confirm that by manually running in the Cygwin terminal

rm -rf '/home/user/*.txt'

which does nothing (it just returns, leaving the .txt files intact in /home/user/), and then running

rm -rf /home/user/*.txt

manually, which does work perfectly, deleting all .txt files in the /home/user/ directory under the Cygwin terminal.

How can I get the above command to remove all .txt iles in /home/user/ from inside a Cygwin terminal BASH script file?

Thanks!


Solution

  • As intimated above, the answer to this is to not use -f when calling bash, e. g.

    just

    bash myfile.sh