view find_free_port.sh @ 4:ace14a8ac6e4 draft

planemo upload for repository https://github.com/galaxy-genome-annotation/galaxy-tools/tree/master/tools/genenotebook commit 81226a2f347b2dc273546311e7269c07f0b0f485
author gga
date Tue, 10 Oct 2023 15:29:02 +0000
parents 22f22c3e81bf
children
line wrap: on
line source

#!/bin/bash

set -e

# This script finds a free port on the local machine in the 7000-65000 interval
# Should work in biocontainers derived from conda
# Taken from https://unix.stackexchange.com/a/358101

if command -v ss &> /dev/null
then
  ss -alnut | awk '
    $2 == "LISTEN" {
      if ($5 ~ "[.:][0-9]+$") {
        split($5, a, /[:.]/);
        port = a[length(a)];
        p[port] = 1
      }
    }
    END {
      for (i = 7000; i < 65000 && p[i]; i++){};
      if (i == 65000) {exit 1};
      print i
    }
  '
elif command -v netstat &> /dev/null
then
  netstat -aln | awk '
    $6 == "LISTEN" {
      if ($4 ~ "[.:][0-9]+$") {
        split($4, a, /[:.]/);
        port = a[length(a)];
        p[port] = 1
      }
    }
    END {
      for (i = 7000; i < 65000 && p[i]; i++){};
      if (i == 65000) {exit 1};
      print i
    }
  '
else
  echo "This tool requires one of 'netstat' of 'ss' commands."
fi