Search code examples
shellforeachcsh

how to write foreach in one line in csh?


Sometimes I use same foreach operation with different target files in csh.
If I can give foreach command in a single line, I could easily substitue the target file names to repeat the process.(I usually use `find . -name ...` for target files)
For the purpose of this question, let's assume I want to cat all the *.txt files.

$ foreach i (*.txt)
foreach? cat $i
foreach? end

I read https://unix.stackexchange.com/questions/32873/running-a-full-foreach-command and tried

alias disp 'echo "foreach i (*.txt)"; echo "cat "\$"i"; echo "end"; | /bin/csh'

when I type disp it gives me Invalid null command.
If I can do it in a single line, I could do !foreach:gs/\.c\>/.h/ (do the same replacing .c with .h). How can I do it?


Solution

  • This method works for me:

    printf 'foreach f ( 1 2 3 )\n echo $f \n end' | tcsh