J’ai entrée cron qui ressemble à ceci qui fonctionne: (en passant dans 5 entrées)
30 10 * * 5 sh /home/test.sh hostnm101.abc /mypath/dir test foobar F008AR >> /logs/mytst.log 2>&1
Je veux le changer afin de stocker les entrées (4,5) foobar
et F008AR
dans un fichier séparé et de les lire par script test.sh (4 $, 5 $)
test.sh
#!/bin/bash if [ $# != 5 ]; then exit 1 fi DIRDT=`date '+%Y%m%d'` TSTDIR=$2/test/$DIRDATE [ ! -d "$TSTDIR" ] && ( mkdir "$TSTDIR" || { echo 'mkdir command failed'; exit 1; } ) perl /home/dev/tstextr.pl -n $1 -b $2 -d $TSTDIR/ -s $3 -u $4 -p $5 -f $DIRDT
Y at-il un moyen facile de faire cela dans le cron pour ces (2) valeurs d’entrée? Merci.
Bien essayer de cette façon.
1) Créez un fichier séparé /mypath/dir/login.info
avec un contenu comme celui-ci (nom d’utilisateur / mot de passe sur des lignes séparées):
foobar F008AR
2) Modifiez votre test.sh comme ceci:
#!/bin/bash if [ $# != 4 ]; then exit 1 fi DIRDT=`date '+%Y%m%d'` TSTDIR=$2/test/$DIRDATE [ ! -d "$TSTDIR" ] && ( mkdir "$TSTDIR" || { echo 'mkdir command failed'; exit 1; } ) IFS=" " arr=( $(<$2/$4) ) #echo "username=${arr[0]} password=${arr[1]}" perl /home/dev/tstextr.pl -n $1 -b $2 -d $TSTDIR/ -s $3 -u ${arr[0]} -p ${arr[1]} -f $DIRDT
3) Avoir votre commande cron comme ceci:
30 10 * * 5 sh /home/test.sh hostnm101.abc /mypath/dir test login.info >> /logs/mytst.log 2>&1
Je l'utilise comme ceci:
IFS=" "
Ce qui signifie que le nouveau caractère de ligne doit être utilisé comme séparateur de champs (puisque nous stockons le nom d'utilisateur et le mot de passe sur deux lignes distinctes). Et puis cette ligne pour lire le fichier /mypath/dir/login.info
dans un tableau:
arr=( $(<$2/$4) )
$arr[0]
$arr[1]
Vous pouvez lui faire écho pour vérifier le contenu lu:
echo "username=${arr[0]}" echo "password=${arr[1]}"
cron s’exécute avec sh -c donc:
sh /home/test.sh hostnm101.abc /mypath/dir test `cat /mypath/dir/foobar_file` `cat /mypath/dir/F008AR_file` >> /logs/mytst.log 2>&