Forcibly break a for loop in sh

Solution 1:

The easiest way I know would be to suspend the foreground job (^Z), then kill it using the job id (kill %<JOB_ID>).

Example:

[me@host]$ while [ : ]; do less /etc/motd; done   # Ctrl-C can't kill this

After a Ctrl+z

[1]+  Stopped                 less /etc/motd

[me@host]$ kill %1
[me@host]$

The number within the brackets ([1]) at the beginning of the suspension message gives you the job id.

You can also list out ids of suspended jobs using the the jobs command.