- 
      
- 
        Save espaciomore/28e24ce4f91177c0964f4f67bb5c5fda to your computer and use it in GitHub Desktop. 
| #!/bin/bash | |
| ARGS="${@}" | |
| clear; | |
| while(true); do | |
| OUTPUT=`$ARGS` | |
| clear | |
| echo -e "${OUTPUT[@]}" | |
| done | 
I tweaked @mchandschuh version a little more by executing the command before clearing the screen. Espacially for long-running commands there is no more flickering for me.
#!/bin/bash
ARGS="${@}"
clear;
while(true); do
  OUTPUT=`$ARGS`
  clear
  echo -e "${OUTPUT[@]}"
  sleep 1
doneThanks for this and all the improvements!
I made a version that is nearly flicker-less. It clears the previous 25 lines. Any lines of output beyond 25 will scroll.
#!/bin/bash
ARGS="${@}"
clear;
while(true); do
  OUTPUT=`$ARGS`
  for i in {1..25}; do
    printf '\e[1A\e[K'
  done
  echo -e "${OUTPUT[@]}"
  sleep 1
donemingw64 does not have watch so I found this gist. I tried to look at the esacpe sequence of original watch with strace with  strace -f watch echo test. Found  this escape sequence: write(1, "\33[1;75H", 7�[1;75H)                = 7
#!/usr/bin/bash
interval=2
if [ "$1" = "-n" ]; then # allow -n {interval} at start 
  interval=$2
  shift 2
fi
clear
while true; do
   printf "%b\n\n" "\033[1;1HEvery $interval s:$*\033[1;75H$(hostname): $(date)"
   "$@"
   sleep "$interval" 
done
you can add it as a function to ~/.bash_aliases
watch () {
  ARGS="${@}"
  clear;
  while(true); do
    clear
    OUTPUT=`$ARGS`
    echo -e "${OUTPUT[@]}"
    sleep 1
  done
}And I added some additional information to the watch function to make it look like it does in native linux -
watch () {
  ARGS="${@}"
  clear;
  while(true); do
    OUTPUT=`$ARGS`
    clear
    echo -e "Every 1.0s: $ARGS"
    echo ""
    echo -e "${OUTPUT[@]}"
    sleep 1
  done
}And I added some additional information to the watch function to make it look like it does in native linux -
watch () { ARGS="${@}" clear; while(true); do OUTPUT=`$ARGS` clear echo -e "Every 1.0s: $ARGS" echo "" echo -e "${OUTPUT[@]}" sleep 1 done }
this is awesome!!!
I added the -n parameter support. For example watch -n 5 ls -l
watch() {
  local interval=1 # Standardintervall
  local command_to_run=""
  # Einfache Argumenten-Analyse
  if [[ "$1" == "-n" && "$2" =~ ^[0-9]+(\.[0-9]+)?$ ]]; then
    interval="$2"
    shift 2 # Entfernt -n und die Zahl von den Argumenten
  fi
  command_to_run="${@}"
  if [ -z "$command_to_run" ]; then
    echo "Usage: watch [-n <seconds>] <command>"
    return 1
  fi
  clear
  while true; do
    # Führe den Befehl aus und speichere Ausgabe und Fehler
    OUTPUT="$($command_to_run 2>&1)"
    clear
    echo -e "Every ${interval}s: $command_to_run"
    echo ""
    echo -e "${OUTPUT}"
    sleep "$interval"
  done
}Additional update on top of @ManuelReschke's version! I've added the eval command to support the usage of | and other more complex commands
watch() {
  local interval=1 # Standardintervall
  local command_to_run=""
  # Einfache Argumenten-Analyse
  if [[ "$1" == "-n" && "$2" =~ ^[0-9]+(\.[0-9]+)?$ ]]; then
    interval="$2"
    shift 2 # Entfernt -n und die Zahl von den Argumenten
  fi
  command_to_run="${@}"
  if [ -z "$command_to_run" ]; then
    echo "Usage: watch [-n <seconds>] <command>"
    return 1
  fi
  clear
  while true; do
    # Führe den Befehl aus und speichere Ausgabe und Fehler
    OUTPUT="$( eval "$command_to_run" 2>&1)"
    clear
    echo -e "Every ${interval}s: $command_to_run"
    echo ""
    echo -e "${OUTPUT}"
    sleep "$interval"
  done
}verified in Git Bash terminal
@saadzimat430
C:\Users\{user}\.bashrc