Отвечать на вопрос 1: если Вы работаете crontab -e
как Ваш собственный пользователь задания будут запланированы в crontab того пользователя и будут таким образом работать с полномочиями того пользователя.
Но необходимо полагать, что задания будут работать в неинтерактивной оболочке, означающей, что $PATH мог бы отличаться от того, который Вы имеете при запущении скрипта из командной строки.
Лучше всегда использовать полные пути в сценариях, особенно если Вы планируете запланировать их через в/крон и т.д.
Я также рекомендовал бы использовать полные пути для всех файлов для предотвращения точно проблем, которые Вы видите.
Для предотвращения условий состязания и других проблем безопасности, необходимо также использовать mktemp
для проверки файл, который Вы читаете, не изменяется ничем вне Вашего сценария.
Таким образом, я изменил бы сценарий на что-то как:
vIP_ADDR="`curl automation.whatismyip.com/n09230945.asp`"
echo "$vIP_ADDR"
mail_msg=`/bin/mktemp`
/bin/sed "s/IPADDR/$vIP_ADDR/g" /home/xxxx/Documents/Scripts/template.txt > $mailmsg
/path/to/ssmtp XXXXX@gmail.com < $mailmsg
/bin/rm $mailmsg
Попробуйте что-то вроде этого:
#!/usr/bin/gawk -f
{
## Every time we change file, print the data for
## the last file read (ARGV[ARGIND-1])
if(FNR==1 && ARGIND>1){
print "This was the analysis of file:" ARGV[ARGIND-1]
print "The number of lines with >10 characters is:" s,"\n"
s=0;
}
if(length($0)>10){
print "The line number is:" FNR
print "The content of the line is:" substr($0,10)
s=s+1
}
}
## print the data collected on the last file in the list
END{
print "This was the analysis of file:" ARGV[ARGIND]
print "The number of lines with >10 characters is:" s,"\n"
}
Если Вы выполняете это на файлах a
, b
и c
:
$ ./foo.awk a b c
The line number is:2
The content of the line is:kldjahlskdjbasd
This was the analysis of the file:a
The number of lines with characters >10 is:1
The line number is:2
The content of the line is:ldjbfskldfbskldjfbsdf
The line number is:3
The content of the line is:kfjbskldjfbskldjfbsdf
The line number is:4
The content of the line is:ldfbskldfbskldfbskldbfs
The line number is:5
The content of the line is:lsjdbfklsdjbfklsjdbfskljdbf
This was the analysis of the file:b
The number of lines with characters >10 is:4
The line number is:1
The content of the line is: asdklfhakldhflaksdhfa
This was the analysis of the file:c
The number of lines with characters >10 is:1
можно вставить сводку конца файла END {...}
блок - это будет выполняться, поскольку сценарий выходит.
т.е. избавьтесь от поддельного x=wc -l
и изменение if (FNR > x) { ... }
только к END { ... }
xargs -n 1
или любой из нескольких других методов запущения awk скрипта однажды на файл.
– cas
02.04.2013, 11:40