Portál AbcLinuxu, 29. října 2025 08:09
#!/bin/bash
ARGUMENTS=( arg1 arg2 arg3 arg4 arg5 )
for ARGUMENT in ${ARGUMENTS[@]}
do
./slave.sh $ARGUMENT &
./slave.sh $ARGUMENT &
done
slave.sh:
#!/bin/bash
ARGUMENT=$1
while [ 1 ]
do
echo $ARGUMENT
sleep 30
done
main.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.