我尝试将最新的文件名保存到变量中,但每次都出现权限被拒绝的错误。有没有关于如何将其保存到变量的建议。
test = `$(ls -t /opt/inbound/Sample*.dat.gz | head -1)`
错误:
-
bash: /opt/inbound/Sample_04142019_05_52_03.dat.gz: Permission denied
答案1
您应该删除反引号或命令替换:
test=$(ls -t /opt/inbound/Sample*.dat.gz | head -1)
或者
test=`ls -t /opt/inbound/Sample*.dat.gz | head -1`
看命令替换
通过添加两者,您的代码将尝试执行它找到的最后一个文件名
答案2
反引号$( … )
和差不多一样. 你正在做类似的事情
test = $( $(ls -t /opt/inbound/Sample*.dat.gz | head -1) )
即执行ls … | head …
,然后执行它返回的任何内容:/opt/inbound/Sample_04142019_05_52_03.dat.gz
显然。您不想执行此操作。
此外,您即将执行test
,不会将任何内容保存到变量中。使用参数和test = whatever
运行。正确的变量赋值不包含以下空格:。test
=
whatever
test=whatever
你可能是指
test="$(ls -t /opt/inbound/Sample*.dat.gz | head -1)"
注意ls
不建议解析。无法保证变量将保存所需文件的准确全名。即使您找到一个在所有情况下都返回准确名称的命令,带有尾随换行符的名称也不会被正确存储,因为$( … )
会删除任何尾随换行符。