Zsh
The zsh
offers a wide variety of possibile features to simplify command-line usage. If you're interested in a more user-friendly shell, look at ohmyzsh. It is easy to install and offers a wide variety of usability improvements, like better tab completion, integrated git status messages and so on.
If you're interested in one of these, put them in your ~/.zshrc
.
Here are some useful functions for zsh
, specific to Slurm-HPC-systems.
Auto-completion for scancel
function _scancel { SQUEUE_OUTPUT=$(squeue -o "%i:%j" -u $USER | grep -v "JOBID:NAME") SCANCEL_COMMANDS=( '--signal=:Signal type (USR1, USR2, INT etc.)' '--batch:Send signal to all batch steps' ) while IFS= read -r line; do if [[ ! -z $line ]]; then SCANCEL_COMMANDS+=("$line") fi done <<< "$SQUEUE_OUTPUT" SCANCEL_COMMANDS_STR=$(printf "\n'%s'" "${SCANCEL_COMMANDS[@]}") eval "_describe 'command' \"($SCANCEL_COMMANDS_STR)\"" } compdef _scancel "scancel"
Auto completion with lmod/ml
function _ml { ML_COMMANDS=( '-t:Show computer parsable output' 'unload:Unload a Module' 'spider:Search for a module' 'avail:Show available modules' 'list:List loaded modules' ) ML_COMMANDS_STR=$(printf "\n'%s'" "${ML_COMMANDS[@]}") eval "_describe 'command' \"($ML_COMMANDS_STR)\"" _values -s ' ' 'flags' $(ml -t avail | sed -e 's#/$##' | tr '\n' ' ') } compdef _ml "ml"
ftails
When using this, you will be able to follow jobs more easily. If you have just one sbatch job running, and enter ftails
, it will automatically follow that one job. If you have more than one running, it will prompt you (via whiptail) which job to choose. It also adds slurmlogpath
, which, when called like slurmlogpath $SBATCH_ID
will print the log path to stdout.
function slurmlogpath { scontrol show job $1 | grep StdOut | sed -e 's/^\s*StdOut=//' } function ftails { JOBID=$1 if [[ -z $JOBID ]]; then JOBS=$(squeue --format="%i \\'%j\\' " -u $USER | grep -v JOBID) NUMBER_OF_JOBS=$(echo "$JOBS" | wc -l) JOBID= if [[ "$NUMBER_OF_JOBS" -eq 1 ]]; then JOBID=$(echo $JOBS | sed -e "s/'//g" | sed -e 's/ .*//') else JOBS=$(echo $JOBS | tr -d '\n') JOBID=$(eval "whiptail --title 'Choose jobs to tail' --menu 'Choose Job to tail' 25 78 16 $JOBS" 3>&1 1>&2 2>&3) fi fi SLURMLOGPATH=$(slurmlogpath $JOBID) if [[ -e $SLURMLOGPATH ]]; then tail -n100 -f $SLURMLOGPATH else echo "No slurm-log-file found" fi }
Alias for squeue -u $USER
Sometimes one has to know which jobs are still running and this is done by squeue -u $USER
. This is tough to type, and writing sq
for that is easier.
alias sq="squeue -u $USER"