Aliasy to bardzo przydatna funkcja, pozwalająca na zdefiniowanie skrótów do często używanych poleceń, bez konieczności podawania długich parametrów. Po zdefiniowaniu aliasu, wystarczy wywołać wybraną nazwę, by zastąpić wybrane polecenie (lub ciąg poleceń).
Aliasy definujemy w pliku .bash_profile
. Jest to plik tekstowy w katalogu domowym użytkownika. Plik ten jest wczytany przez powłokę, po każdym logowaniu się do systemu.
Oto klika przykładowów użytycznych aliasów:
alias dir='/usr/bin/ls -l'
abcd@ui ~>/usr/bin/ls
bin myjob.sh scripts
abcd@ui ~ $ dir
drwxr-xr-x 2 abcd kdm 2048 Aug 24 11:31 bin
-rwxr-xr-x 1 abcd kdm 25 Aug 30 14:43 myjob.sh
drwxr-xr-x 2 abcd kdm 2048 Aug 31 08:54 scripts
Jeśli często sprawdzamy status swoich zadań i nie chcemy za każdym razem wpisywać squeue -u user, alias alias sq='squeue -u ${USER}'
może zastąpić całe polecenie.
abcd@ui ~ $ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
578372 short zad33 user1 PD 0:00 1 (QOSMaxJobsPerUserLimit)
578371 normal zad1 abcd PD 0:00 1 (QOSMaxJobsPerUserLimit)
578370 normal zad2 abcd PD 0:00 1 (QOSMaxJobsPerUserLimit)
578372 short job9a user3 PD 0:00 1 (QOSMaxJobsPerUserLimit)
...
abcd@ui ~ $ sq
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
578371 normal zad1 abcd PD 0:00 1 (QOSMaxJobsPerUserLimit)
578370 normal zad2 abcd PD 0:00 1 (QOSMaxJobsPerUserLimit)
Polecenie rm plik służy do usuwania plików oraz katalogów rm -r nazwa_katalogu.
abcd@ui ~ $ ls
myjob.sh myrus.sh temp wyniki.578371 wyniki.578372
abcd@ui ~ $ rm wyniki.*
abcd@ui ~ $ ls
myjob.sh myrus.sh temp
Definiując alias alias rm='/usr/bin/rm -i'
, powodujemy, że komenda rm, będzie wymagać potwierdzenia usunięcia pliku. Pozwala to zapobiegc przypadkowemu usunięciu potrzebnych plików.
abcd@ui ~ $ ls
myjob.sh myrus.sh temp wyniki.578371 wyniki.578372
abcd@ui ~ $ rm wyniki.578371
/usr/bin/rm: remove regular file 'wyniki.578371'? n
abcd@ui ~ $ ls
myjob.sh myrus.sh temp wyniki.578371 wyniki.578372
Analogiczne, definiując podobne aliasy dla komend cp oraz mv, można zapobiec nadpisywaniu plików podczas uruchamiania tych komend.
Aliasów można ominąć podając pełną ściężkę do komendy. Na przykład komenda /usr/bin/rm spowoduje to, że rm nie będzie pytać o potwierdzenie przed usunięciem plików.
Poniższy przykład pokazuje użycie zmiennych środowiskowych systemu opracyjnego oraz systemu kolejkowania SLURM.
Przykładowy skrypt myrun.sh
#!/bin/bash
# Sprawdź czy podano nazwę pliku do wykonania
if [[ -z $1 ]]; then
echo "Nie podano nazwe pliku do wykonania"
exit 1
fi
# Sprawdź czy podany plik istnieje, i mamy do niego dostęp
if [[ ! -f $1 ]]; then
echo "Podany plik ($1) nie istnieje"
exit 1
fi
# Katalog roboczy w którym będą wyniki /home/<nazwa_użytkownika>/<nr_zadania>
WORKDIR=/home/${USER}/${SLURM_JOBID}
# Sprawdź czy istnieje katalog roboczy, i jeśli nie to utwórz go
if [[ ! -d ${WORKDIR} ]]; then
/usr/bin/mkdir ${WORKDIR} || exit 1
fi
# wywołanie programu lub skryptu do wykonania
$1 > ${WORKDIR}/wyniki.${SLURM_JOB_NAME}
Oto przykład, jak wykorzystać poprzedni skrypt do uruchamiania zadania myjob.sh
abcd@ui ~ $ srun myrun.sh myjob.sh
Skrypty znajdujące się w katalogu
/home/${USER}/bin
, można uruchomoć wpisując tylko nazwę skryptu.