Occhio che lo shebang+eseguibile va messo nella prima riga del programma per avere senso, ed e’ composto da
#! /percorso/interprete
con o senza spazio tra lo shebang e il percorso.
Altra cosa MOLTO importante: su fedora e altre RPM-based ti va bene che /bin/sh e’ un link a /bin/bash, e quidi stai effettivamente usando comunque bash. Su altre distro /bin/sh puo’ puntare ad altro, oppure essere effettivamente la “vecchia” sh. Il caso piu’ famoso e’ ubuntu, che in alcune vecchie versioni faceva puntare a dash, che faceva spaccare parecchi script come il tuo:
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.6 LTS (Xenial Xerus)"
$ ll /bin/sh
lrwxrwxrwx 1 root root 4 Feb 17 2016 /bin/sh -> dash*
Quindi richiedi sempre bash con lo shebang corretto alla prima riga:
#! /bin/bash
(anzi, la cosa migliore sarebbe rendere il tutto ancora piu’ portabile usando
#! /usr/bin/env bash
questo e’ comodissimo quando si sviluppa in python perche’ vuoi che sia il tuo ambiente a decidere quale versione di python-e-relative-librerie usare, spesso usando cose come virtualenv, e non vuoi puntare a un python di sistema… cosa altamente poco portabile)
Non capisco infine che senso abbia buttare tutto dentro un’altra shell… in cosa dovrebbe aiutarti?
Ultima cosa: non lanciare l’installazione diretta senza “prompt” di conferma con ‘dnf install -y’; prima ricontrolla il tutto.
Io farei (a mano, non c’e’ bisogno di script):
[code]$ dnf list installed | tail -n +2 |cut -d’.’ -f1 |sort |uniq |tee installed_f30.txt
… controllo `installed_f30.txt’ che non ci siano cose strane
cat installed_f30.txt |xargs dnf install $1 --forcearch x86_64 --version=31[/code]