我试图为RStudio包管理器编写一个脚本,以便自动更新。
到目前为止我有这个
#!/bin/bash
LOGFILE=/var/log/rstudio-pm.update.log
echo "`date '+%D %H:%M:%S'`: Starting rstudio-pm update." >> $LOGFILE
echo "`date '+%D %H:%M:%S'`: Synchronizing with CRAN." >> $LOGFILE
sync_result=`/opt/rstudio-pm/bin/rspm sync`
echo "`date '+%D %H:%M:%S'`: $sync_result" >> $LOGFILE
echo "`date '+%D %H:%M:%S'`: Completed synchronization with CRAN." >> $LOGFILE
echo "`date '+%D %H:%M:%S'`: Starting dryrun update." >> $LOGFILE
dryrun_result=`sudo /opt/rstudio-pm/bin/rspm update --source=my-cran`
echo "`date '+%D %H:%M:%S'`: $dryrun_result" >> $LOGFILE
echo "`date '+%D %H:%M:%S'`: Completed dryrun update." >> $LOGFILE
dryrun_result_last_line=`echo $dryrun_result| tail -n 1`
echo "`date '+%D %H:%M:%S'`: BEGIN ECHO OF DRY RUN RESULT LAST LINE" >> $LOGFILE
echo "`date '+%D %H:%M:%S'`: $dryrun_result_last_line" >> $LOGFILE
echo "`date '+%D %H:%M:%S'`: END ECHO OF DRY RUN RESULT LAST LINE" >> $LOGFILE
if [[ $dryrun_result_last_line =~ "--snapshot=" ]]
then
echo "`date '+%D %H:%M:%S'`: Starting actual update." >> $LOGFILE
param=`echo $dryrun_result_last_line | sed 's/.*\(--snapshot=[0-9]\+\).*/\1/'`
echo "`date '+%D %H:%M:%S'`:PARAMETERS FOR UPDATE $param" >> $LOGFILE
cmd="/opt/rstudio-pm/bin/rspm update --source=my-cran $param --commit"
echo "`date '+%D %H:%M:%S'`: Running: $cmd" >> $LOGFILE
update_result=`$cmd`
echo "`date '+%D %H:%M:%S'`: $update_result" >> $LOGFILE
echo "`date '+%D %H:%M:%S'`: Completed actual update." >> $LOGFILE
else
echo "`date '+%D %H:%M:%S'`: All packages already up to date." >> $LOGFILE
fi我的命令应该是这样的:
sudo /opt/rstudio-pm/bin/rspm update --source=my-cran --snapshot=2021-06-25 --commit(--快照=标志中的日期是我最终需要更改的变量。日期必须与CRAN的最新版本相对应。
变量$dryrun_result_last_line返回类似于
此操作将添加或存档以下包:名称版本路径许可证需要编译依赖操作扫帚0.7.8 MIT +文件许可证无真添加检查点1.0.0 GPL-2无虚假添加颜色空间2.0-2 BSD_3_clause +文件许可证为假添加4.3.2 MIT +文件许可证为false添加dplyr 1.0.7 +文件许可证为false添加文件许可证1.0.2 MIT +文件许可证为true添加gert 1.3.1 MIT +文件许可证为true添加ggplot2 3.3。4 MIT +文件许可证无假添加ggsignif 0.6.2GPL-3\x+文件许可证无假添加glmnet 4.1-2 GPL-2是假添加lme4 1.1-27.1 GPL (>= 2)是假添加lpSolve 5.6.15 LGPL-2是真添加mime 0.11 GPL是假添加openxlsx 4.2.4 MIT +文件许可证为假添加pkgcache 1.2.2 MIT +文件许可证未真正添加pkglix0.1.1 MIT +文件许可证未真正添加4.9.4.1 MIT +文件许可证无错误添加心理2.1.6GPL (>= 2)无虚假添加里奥0.5.27 GPL-2无虚假添加rmarkdown 2.9 GPL-3无虚假添加scatterD3 1.0.0 GPL (>= 3)无虚假添加测试3.0.3 MIT +文件许可证为真添加xfun 0.24 MIT +文件许可证为假添加扫帚0.7.7 MIT +文件许可证没有存档检查点0.4.10 GPL-2无存档空间2.0-1 BSD_3_clause +文件许可证yes存档卷4.3.1 MIT +文件许可证yes归档dplyr 1.0.6 MIT +文件许可证yes归档gert 1.3.0 MIT +文件许可证yes ggplot2 3.3.3 MIT +文件许可证无归档GPL-3无存档GPL -3无存档GPL 4.1-1 GPL-2 yes存档lme4 1.1-27 GPL (>= 2) yes归档模拟0.10 GPL yes归档openxlsx 4.2.3 MIT +文件许可证yes归档4.9.4 MIT +文件许可证无归档激活2.1.3 GPL(>=2)(>= 2)没有存档(里约0.5.26 GPL-2没有存档重标记2.8GPL-3没有存档scatterD3 0.9.2GPL( >= 3)没有存档测试3.0.2 MIT +文件许可证yes存档xfun 0.23 MIT +文件许可证yes归档完成此操作,使用以下标志执行此命令:'--snapshot=2021-06-25 --提交‘。
我要把2021-06-25从上面拉出来。
我怎样才能做到这一点。在我的日志文件中,我的$param变量只返回--快照=2021
怎样才能让它返回2021-06-25的全部日期?
谢谢
发布于 2021-06-28 17:06:39
怎样才能让它返回2021-06-25的完整日期?
简短的回答:要在比赛中包括连字符,把它包含在括号表达式中,即[0-9-]。
如果您还感兴趣:您的$dryrun_result_last_line不只是包含$dryrun_result的最后一行,因为echo $dryrun_result失去了换行符;要保留它们,您必须引用:
dryrun_result_last_line=`echo "$dryrun_result" | tail -1`如果您的shell支持<<<重定向,还可以使用:
dryrun_result_last_line=`tail -1 <<<$dryrun_result`甚至
dryrun_result_last_line="${dryrun_result##*
}"https://stackoverflow.com/questions/68166200
复制相似问题