Portál AbcLinuxu, 10. května 2025 13:22
#!/bin/bash ARGUMENTS=( arg1 arg2 arg3 arg4 arg5 ) for ARGUMENT in ${ARGUMENTS[@]} do ./slave.sh $ARGUMENT & ./slave.sh $ARGUMENT & doneslave.sh:
#!/bin/bash ARGUMENT=$1 while [ 1 ] do echo $ARGUMENT sleep 30 donemain.sh spustí 10 krát script slave.sh s rôznymi argumentami. Ciel je aby script napr. "slave.sh arg1" odoslal signál na zmenu premennej napr. "slave.sh arg2" a ten premennu zmenil... Jedine čo ma napladlo je, že by sa premenne ukladali do dočasneho suboru s nazvom hodnota argumentu a od tial by si to slave.sh v každom cykle čital. Ale toto riešenie sa mi nezda moc dobré. Napadá Vás niečo? ďakujem
Řešení dotazu:
export ARG=valNN
=====[ master.sh ]===== #!/bin/bash coproc bash slave.sh #echo $0: pid is ${COPROC_PID} #echo $0: output is ${COPROC[0]} #echo $0: input is ${COPROC[1]} queue=/dev/fd/${COPROC[1]} echo "A message" >$queue echo "Another message" >$queue sleep 5 echo "A delayed message" >$queue =====[ slave.sh ]===== #!/bin/bash while read message; do echo "$0: Got a message: $message." 1>&2 done echo "$0: Finished." 1>&2
#!/bin/bash # Clone stdout to 3 exec 3>&1 # Run TRA filtering letter "a" coproc TRA ( sed s/a/A/g >&3 ) # Run TRB filtering letter "b" coproc TRB ( sed s/b/B/g >&3 ) while read ; do case $REPLY in /* ) echo "$REPLY" >&${TRB[1]} ;; * ) echo "$REPLY" >&${TRA[1]} ;; esac done # Close input (otherwise script will not end on EOF). eval exec ${TRA[1]}\>\&- eval exec ${TRB[1]}\>\&-vyzerá to o niečo zložitejšie, ale snáď to bude fungovať :)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.