我尝试编写一个小的shell脚本来查找目录中最近添加的文件,然后将该文件移动到其他位置。如果我使用:
ls -t ~/directory | head -1
然后将其存储在变量VARIABLE_NAME中,为什么我不能通过以下方式将其移到〜/ otherdirectory:
mv ~/directory/$VARIABLE_NAME ~/otherdirectory
我在这里搜索过谷歌搜索,但似乎没有关于在文件路径中使用变量的任何信息?有更好的方法吗?
编辑:这是脚本的一部分:
ls -t ~/downloads | head -1
read diags
mv ~/downloads/$diags ~/desktop/testfolder
答案 0 :(得分:8)
您可以在脚本中执行以下操作:
diags=$(ls -t ~/downloads | head -1)
mv ~/downloads/"$diags" ~/desktop/testfolder
在这种情况下,diags
的值为ls -t ~/downloads | head -1
,可由mv
调用。
答案 1 :(得分:0)
以下命令
ls -t ~/downloads | head -1
read diags
可能不是你想要的:read命令之前没有从命令接收输入。相反,它等待stdin的输入,这就是你认为脚本“挂起”的原因。也许你想做以下事情(至少这是我提供更好解决方案的第一次错误尝试):
ls -t ~/downloads | head -1 | read diags
然而,这将(如alvits所述)也不起作用,因为管道的每个元素都作为单独的命令运行:因此变量diags不是父shell的一部分,而是子进程的一部分。
因此,正确的解决方案是:
diags=$(ls -t ~/downloads | head -1)
然而,还有一些问题会导致后续的mv命令失败: