我必须命令获取某些类型文件的详细信息。文件名具有特定格式。前两个单词后跟生成文件的日期
e.g:
Report_execution_032916.pdf
Report_execution_033016.pdf
Word摘要也可以代替报告。
e.g:
Summary_execution_032916.pdf
因此在我的shell脚本中我放了这行代码
DATE=`date +%m%d%y`
Model=Report
file=`ls ${Model}_execution_*${DATE}_*.pdf`
但是Model的价值总是被解析为' REPORT'因此我得到了:
ls: cannot access REPORT_execution_*032916_*.pdf: No such file or directory
我被困在如何解决模型的问题。
我无法在此处重现确切的代码。因此我改变了一些变量名。最初我使用了变量名称类型而不是模型。但Model是我在实际代码中使用的
答案 0 :(得分:1)
您已将脚本更改为使用Model=Report
和${Model}
,并且您已在脚本中说过typeset -u Model
。 typeset
命令的-u
选项(而不是declare
- 它们是同义词)意味着“转换分配给所有大写字母的字符串”。
-u
为变量分配值时,所有小写字符都将转换为大写。小写属性已禁用。
这解释了变量扩展中的大写REPORT
。您可以通过写作来证明:
Model=Report
echo "Model=[${Model}]"
由于Model=[REPORT]
,它会回显typeset -u Model
。
-u
选项。你也应该修复你的glob表达式:
file=$(ls ${Model}_execution_*${DATE}*.pdf)
使用$(…)
代替反引号通常是一个好主意。
并且,作为一般观点,了解如何Debug a Bash Script并始终提供MCVE(How to create a Minimal, Complete, and Verifiable Example?),以便我们可以更轻松地查看您的问题。
答案 1 :(得分:0)
要注意的一些事项:
type
通常是一个保留字,虽然它不会破坏您的脚本,但我建议您将该变量名更改为其他名称。$
之前遗漏了{DATE}
,之后又有_
个*
。如果日期是名称的最后一部分,那么最后也没有file
。 file=`ls ${type}_execution_*${DATE}.pdf`
定义应为: ls
尝试按部分调试代码:而不是执行echo
,对每个变量执行ls
,查看出现的内容,并将问题追溯到其原点。
作为@DevSolar pointed out,您可能在解析 Dim List1 = l1.Select(Function(e1) e1.FirstName).Except(l2.Select(Function(e2) e2.FirstName)).ToList
Dim List2 = l2.Select(Function(e2) e2.FirstName).Except(l1.Select(Function(e2) e2.FirstName)).AsEnumerable
的输出时遇到问题。
答案 2 :(得分:0)
作为解决方法
ls | grep `date +%m%d%y` | grep "_execution_" | grep -E 'Report|Summary'
之后过滤ls
输出。
touch 'Summary_execution_032916.pdf'
DATE=`date +%m%d%y`
Model=Summary
file=`ls ${Model}_execution_*${DATE}*.pdf`
在
上工作得很好GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
答案 3 :(得分:0)
Part of question:
But the value of Model always gets resolved to 'REPORT' and hence I get:
这是因为您的脚本中已导出Model = Report
Part of question:
ls: cannot access REPORT_execution_*032916_*.pdf: No such file or directory
没有这样的文件我们的目录问题是由于额外的" _"你已经放在第3行的其他" *" 删除它,错误将消失。虽然,Model仍将解析报告
原创第3行:
file=`ls ${Model}_execution_*${DATE}_*.pdf`
将其更改为
file=`ls ${Model}_execution_${DATE}.pdf`
以上更改将解决无法找到的问题。
Part of question
I am stuck at how the resolution of Model is happening here.
我不确定您要实现的目标,但如果您尝试使用anything_exection_someDate.pdf填充文件名的文件参数,那么您可以将脚本编写为
DATE=`date +%m%d%y`
file=`ls *_execution_${DATE}.pdf`
If you echo the value of file you will get
Report_execution_032916.pdf Summary_execution_032916.pdf
as the answer
答案 4 :(得分:0)
在控件到达我在问题中提到的代码行之前,还调用了一些其他脚本。在一个这样的脚本中有一个代码 typeset -u Model 这会将变量模型的值始终设置为大写,这就是抛出此错误的原因 ls:无法访问REPORT_execution_ 032916 _ .pdf:没有这样的文件或目录
对不起 我无法提供最小,完整和可验证的代码