How I Look for CFD Jobs from the Command Line

May 18, 2024

I regularly check CFD-Online PhD Jobs, but the site lacks RSS or email alerts. To automate job checking, I use a shell script that fetches and parses the latest listings.

Quick One-Liner

curl -sL 'https://www.cfd-online.com/Jobs/listjobs.php?category=PhD%20Studentship' | perl -0777 -nle 'my $i = 1; print "$i. $1 ($2; $3)\n" and $i++ while /<a href="showjob\.php\?record_id=\d+">(.*?)<\/a>.*?<I>(.*?)<\/I><br>\s*(.*?)<br>/gs' | head -10

Shell Function

getcfdjobs() {
  cnt=${1:-10}
  curl -sL 'https://www.cfd-online.com/Jobs/listjobs.php?category=PhD%20Studentship' \
  | perl -0777 -nle 'my $i = 1; print "$i. $1 ($2; $3)\n" and $i++ while /<a href="showjob\.php\?record_id=\d+">(.*?)<\/a>.*?<I>(.*?)<\/I><br>\s*(.*?)<br>/gs' \
  | head -$cnt
}

Job Change Checker

getcfdjobs 100 > $HOME/.cfdjobs
diff <(getcfdjobs 1) <(head -1 $HOME/.cfdjobs) && echo "No new job" || echo "New job detected"

For POSIX shells without <(), use mktemp.

Notifier Script (checkcfdjobs)

#!/bin/sh -e

notify() {
  case $(uname) in
    Linux) notify-send "[CFD-Online] New job!" ;;
    Darwin) osascript -e 'display notification "New job!" with title "CFD-Online"' ;;
    *) echo "Unsupported OS" && exit 1 ;;
  esac
}

getcfdjobs() {
  cnt=${1:-10}
  curl -sL 'https://www.cfd-online.com/Jobs/listjobs.php?category=PhD%20Studentship' \
  | perl -0777 -nle 'my $i = 1; print "$i. $1 ($2; $3)\n" and $i++ while /<a href="showjob\.php\?record_id=\d+">(.*?)<\/a>.*?<I>(.*?)<\/I><br>\s*(.*?)<br>/gs' \
  | head -$cnt
}

tmp_old=$(mktemp)
tmp_new=$(mktemp)
trap 'rm -f $tmp_old $tmp_new' EXIT

head -1 "$HOME/.cfdjobs" > $tmp_old
getcfdjobs 100 | tee "$HOME/.cfdjobs" | head -1 > $tmp_new

diff $tmp_old $tmp_new || notify

Automation

Schedule with cron:

0 */3 * * * /absolute/path/to/checkcfdjobs