[Megoldva !] Bash könyvtárak létrehozás

Sziasztok !

Szeretnék egy kis segítséget kérni. Bash script-be szeretnék létrehozni mappákat.

export SL=/scorpio-linux
mkdir -pv ${SL}

mkdir -pv ${SL}/{bin,boot{,grub},dev,{etc/,}opt,home,lib/{firmware,modules},lib64,mnt}
mkdir -pv ${SL}/{proc,media/{floppy,cdrom},sbin,srv,sys}
mkdir -pv ${SL}/var/{lock,log,mail,run,spool}
mkdir -pv ${SL}/var/{opt,cache,lib/{misc,locate},local}
install -dv -m 0750 ${SL}/root
install -dv -m 1777 ${SL}{/var,}/tmp
install -dv ${SL}/etc/init.d
mkdir -pv ${SL}/usr/{,local/}{bin,include,lib{,64},sbin,src}
mkdir -pv ${SL}/usr/{,local/}share/{doc,info,locale,man}
mkdir -pv ${SL}/usr/{,local/}share/{misc,terminfo,zoneinfo}
mkdir -pv ${SL}/usr/{,local/}share/man/man{1,2,3,4,5,6,7,8}

A problémám az, hogy össze vissza hozzá létre a mappákat. A "{}" jeleket is hozzáadja a mappákhoz és van amit egymásik mappához ad hozzá amit létre se kéne hoznia. puskázásként használtam a lfs könyvet és a cross könyvet is. Ha így futtatom le ahogy most van akkor ezt kapom.

Eredetileg ennek a mappának egyszer kéne létrejönnie.
root@HackerOS:/# ls | grep scorpio-linux
scorpio-linux
scorpio-linux{
root@HackerOS:/#

A benne lévő mappák így jönnek létre.

root@HackerOS:/scorpio-linux# ls
{bin,boot{,grub},dev,{etc cross-tools etc {proc,media root usr var
root@HackerOS:/scorpio-linux#

Tudna valaki segíteni?
Válaszokat előre is köszönöm.

Hozzászólások

Biztosan bash alatt adod ki a parancsokat?

#!/bin/bash -e

Így keztem.

root@HackerOS:/home/pusztito/Scorpio-Linux# bash --version
GNU bash, 5.0.3(1)-release (x86_64-pc-linux-gnu) verzió
Copyright (C) 2019 Free Software Foundation, Inc.
A licenc GPLv3+: a GNU GPL 3. vagy újabb változata

Ez egy szabad szoftver, terjesztheti és/vagy módosíthatja.
NINCS GARANCIA, a törvény által engedélyezett mértékig.
root@HackerOS:/home/pusztito/Scorpio-Linux#

set -B lenne amit szeretnel:
-B the shell will perform brace expansion

viszont ha mas se igazan megy akkor vagy egyaltalan nem mennek a set parameterek vagy ezek nem.
set --help mit mond?

most latom 5-os bash-t hasznalsz ami relative nem tul regota van kinn, nem remlik hogy azzal lett volna mar dolgom, de ketlem hogy kikerult volna belole a set vagy annak ilyen szintu parameterei.
Esetleg valami kezzel forditott valtozat lenne, nem lehet hogy nem sikerult rendesen felrakni?

set --help kimenet:
root@HackerOS:/home/pusztito/Scorpio-Linux# set --help
set: set [--abefhkmnptuvxBCHP] [-o beállításnév] [--] [arg ...]
Parancsértelmező-beállítások és pozicionális paraméterek állítása, törlése.

Parancsértelmező-attribútumok és pozicionális paraméterek értékeinek
módosítása, parancsértelmező-változók neveinek és értékeinek kiírása.

Kapcsolók:
-a A módosított vagy létrehozott változó exportálásra jelölése
-b Munka befejezéséről azonnali értesítés
-e Azonnali kilépés, ha egy parancs nem nullával lép ki
-f Fájlnév-generálás (globbing) tiltása
-h Parancsok helyének megjegyzése használatkor
-k Minden értékadó argumentum a parancs környezetébe kerül, nem
csak a parancsot megelőzők
-m Munkakezelés engedélyezése
-n Parancsok beolvasása végrehajtás nélkül
-o kapcsolónév
Kapcsolónév szerinti változóállítás:
allexport mint -a
braceexpand mint -B
emacs emacs-szerű sorszerkesztés
errexit mint -e
errtrace mint -E
functrace mint -T
hashall mint -h
histexpand mint -H
history előzmények tárolásának engedélyezése
ignoreeof EOF esetén nem lép ki a parancsértelmező
interactive-comments
interaktív parancsokban is lehetnek megjegyzések
keyword mint -k
monitor mint -m
noclobber mint -C
noexec mint -n
noglob mint -f
nolog jelenleg elfogadott, de mellőzött
notify mint -b
nounset mint -u
onecmd mint -t
physical mint -P
pipefail egy csővezeték-parancs kilépési kódja az utolsó
nem nullával kilépett parancs kilépési kódja,
vagy 0, ha nem volt ilyen
posix a bash viselkedésének megváltoztatása, ha az
alapértelmezett nem felel meg a Posix
szabványnak
privileged mint -p
verbose mint -v
vi vi-szerű sorszerkesztés
xtrace mint -x
-p Mindig be van kapcsolva, ha a valós és effektív felhasználó nem
egyezik. Letiltja az $ENV fájl értelmezését és a parancsértelmező-
függvények betöltését. A kapcsoló kikapcsolása az effektív
uid és gid valósra állítását okozza
-t Egyetlen parancs beolvasása és végrehajtás után kilépés
-u Nem létező változók behelyettesítése legyen hiba
-v Beolvasott parancsok kiírása olvasáskor (értelmezés előtt).
-x Parancsok kiírása végrehajtáskor (értelmezés után).
-B Szögleteszárójel-kiegészítés végrehajtása
-C Létező normál fájlok felülírásának tiltása kimenetátirányításnál
-E Az ERR csapdát öröklik a függvények
-H Felkiáltójeles előzményhelyettesítés engedélyezése. Interaktív
parancsértelmezőnél alapértelmezés
-P Parancsok végrehajtásánál szimbolikus linkek követésének tiltása
(például cd esetében)
-T A DEBUG és RETURN csapdát öröklik a függvények
-- A további argumentumok hozzárendelése a pozicionális paraméterekhez.
Ha nincsenek további argumentumok, akkora a pozicionális paraméterek
törlésre kerülnek.
- A további argumentumok pozicionális paraméterekhez rendelése
A -x és -v kapcsolók ki vannak kapcsolva.

„-” helyett „+” használatával a kapcsolók tilthatóak. A kapcsolók a
parancsértelmező indításakor is állíthatóak. Az érvényben lévő kapcsolók
a $- változóban vannak. A záró nem értelmezhető argumentumok pozicionális
paraméterek lesznek (rendre $1, $2 ... $n). Ha nincs ARG, minden
parancsértelmező-változó kiírásra kerül.

Kilépési kód:
Sikerrel tér vissza, kivéve ha érvénytelen kapcsolót kap.
root@HackerOS:/home/pusztito/Scorpio-Linux#

Nem kézzel lett forgatva. Debian csomag. Már délelőtt óta kínlódok ezzel.

Hat help-ben pedig szerepel a parameter (gondolom ugyanabban a bash shell-ben futtattad help-et is):
'-B Szögleteszárójel-kiegészítés végrehajtása'

megis azt mondod illegal option-t ad ra, szoval valami nem kerek azzal a bash-el.

Esetleg debian 10-nel valtozott volna bash eleresi utja es /bin/bash (amit megadtal script elejen) a default dash-re mutat?
'which bash' es 'echo $SHELL' mit mond?
avagy ha nem a scriptben adod ki 'set -B' -t is illegal parameter-t ad, csak hogy biztos ugyanaz a bash fut a scriptbol amit usered is hasznal?

root@HackerOS:/home/pusztito/Scorpio-Linux# which bash
/bin/bash
root@HackerOS:/home/pusztito/Scorpio-Lin

root@HackerOS:/home/pusztito/Scorpio-Linux# echo $SHELL
/bin/bash
root@HackerOS:/home/pusztito/Scorpio-Linux#

Szerk: 'set --help' nem a bash script-be futtattam. Csak simán a console-ból. Ha belerakom a scriptbe, akkor úgyan úgy megkapom a hibát.

'Scorpio-setup.sh: 19: set: Illegal option --'

Biztos vagy benne, hogy a scriptet Bash futtatja, és nem egy fapadosabb shell?

És mi a script első sora?
--
"Sose a gép a hülye."

Szerintem a scriptet nem a bash futtatja, hanem pl. dash. Ami meghívja, az valószínűleg így indítja:

/bin/sh /valahol/ascript.sh

A /bin/sh meg vagy dash vagy valami más, de nem bash.

Próbaképp bele lehet taknyolni olyat, hogy:

if [ "${SHELL}" != "/bin/bash" ]
then
 /bin/bash "$0"
fi

Megvan a megoldás. Igazatok volt. Úgy néz ki, tényleg nem a bash-t használta.
Ez megoldota a gondot 'ln -sf bash /bin/sh'

Köszönöm a segítségeteket.

Nekem mar kicsit osszezavaro ez a sok kulonbozo post es script-reszlet (illetve eleve, hogy magyarul hasznalod a rendszert..). A user-edhez milyen default shell van beallitva? Valaha momlltal valamit a shell-ekkel? Ha bash-ben vagy, a script elejen explicit beallitod azt interpreternek, mi az, ami miatt megsem az hajtja vegre futtataskor?

Én kihagynám a csiribú könyvtárlétrehozást. Ha ragaszkodsz hozzá, akkor amit az elején írtam, ha nem bash futtatja, akkor bash-al újból meghívod (csak nem olyan hülyén ahogy írtam, mondjuk a $SHELL helyett a $BASH_VERSION-t nézni, és ott kihagytam az else ágat, mert birka voltam).

Igazatok volt. A linkelés tényleg tacsra vágta a rendszert.
A legokosabb módja, ha futtatási jogot adunk hozzá és simán a './script.sh' -val indítjuk .