首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要在CentOS脚本中使用SED命令来自动更新RStudio包管理器中的已管理的CRAN

需要在CentOS脚本中使用SED命令来自动更新RStudio包管理器中的已管理的CRAN
EN

Stack Overflow用户
提问于 2021-06-28 15:37:28
回答 1查看 47关注 0票数 1

我试图为RStudio包管理器编写一个脚本,以便自动更新。

到目前为止我有这个

代码语言:javascript
复制
    #!/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

我的命令应该是这样的:

代码语言:javascript
复制
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的全部日期?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-28 17:06:39

怎样才能让它返回2021-06-25的完整日期?

简短的回答:要在比赛中包括连字符,把它包含在括号表达式中,即[0-9-]

如果您还感兴趣:您的$dryrun_result_last_line不只是包含$dryrun_result的最后一行,因为echo $dryrun_result失去了换行符;要保留它们,您必须引用:

代码语言:javascript
复制
dryrun_result_last_line=`echo "$dryrun_result" | tail -1`

如果您的shell支持<<<重定向,还可以使用:

代码语言:javascript
复制
dryrun_result_last_line=`tail -1 <<<$dryrun_result`

甚至

代码语言:javascript
复制
dryrun_result_last_line="${dryrun_result##*
}"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68166200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档