我正在尝试搜索放置在目录中的最新文件,并且我想读取文件的第一行以用作命令中的变量。当我使用下面的变量定义以及随附的代码行调用Chromium时,会收到一个错误消息,即未找到文件或目录,但是我们看到已找到文件或目录,并且如果我在{的定义之间放置了echo $FILE
{1}}和FILE
,它返回文件名。在错误消息中,您可以看到此信息。
我已经尝试了多种解决方案,但是除了这个错误,我什么也没得到。抱歉,如果我在这里没有全部定义。
LINE
我收到的错误是:
FILE=$(ls -t /media/presentation/Lobby2/ | head -n1)
LINE=$(head -n1 $FILE)
/usr/bin/chromium-browser --noerrdialogs --disable-infobars --kiosk $FILE &
答案 0 :(得分:2)
除非您碰巧在/media/presentation/Lobby2
中,否则head
找不到文件,因为FILE
仅包含onlinepresentation.txt
–路径未列出。快速解决方案是将路径分开保存:
path=/media/presentation/Lobby2
file=$(ls -t "$path" | head -n1)
line=$(head -n1 "$path/$file")
(请注意引号和lowercase variable names一致。)
但是,不建议在脚本中使用ls
的输出,请参见Why you shouldn't parse the output of ls(1)
。在BashFAQ/003中讨论了获取最新文件的方法,
for file in /media/presentation/Lobby2/*; do
[[ $file -nt $latest ]] && latest=$file
done
line=$(head -n1 "$latest")
您甚至可以取消所有非Bash命令,并用以下命令替换line=$(head -n1 "$latest")
:
IFS= read -r line < "$latest"
答案 1 :(得分:0)
Benjamin W.提供了一个很好的工作答案。
我最终选择了:
for file in $PATH1/*.mp4; do
[[ $file -nt $latest ]] && latest=$file
done
if [ "$latest" -nt "$PATH2/video.mp4" ]
then
cp $latest $destination
fi
谢谢