Почему я не могу получить доступ к файлу, который я получил с вывода "ls"? - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь найти последний файл, помещенный в каталог, и хочу прочитать первую строку в файле, чтобы использовать его в качестве переменной в команде.Когда я использую приведенные ниже определения переменных и сопровождающую строку для вызова Chromium, я получаю сообщение об ошибке, что файл или каталог не найдены, но мы видим, что он был найден, и если я помещаю echo $FILE между определением для FILEи LINE возвращает имя файла.В сообщении об ошибке вы можете увидеть это.

Я пробовал несколько решений, но ничего не получило меня, кроме этой ошибки.Извините, если я не определил их все здесь.

FILE=$(ls -t /media/presentation/Lobby2/ | head -n1)
LINE=$(head -n1 $FILE)
/usr/bin/chromium-browser --noerrdialogs --disable-infobars --kiosk $FILE &

Я получаю ошибку:

head: cannot open 'onlinepresentation.txt' for reading: No such file or directory

Ответы [ 2 ]

2 голосов
/ 06 июня 2019

Если вы не попали в /media/presentation/Lobby2, head не может найти файл, потому что FILE содержит только onlinepresentation.txt - путь не указан. Быстрое решение состоит в том, чтобы сохранить путь отдельно:

path=/media/presentation/Lobby2
file=$(ls -t "$path" | head -n1)
line=$(head -n1 "$path/$file")

(Обратите внимание на согласованные кавычки и имена переменных в нижнем регистре .)

Однако не рекомендуется использовать вывод ls в сценариях, см. Почему вы не должны анализировать вывод 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"
0 голосов
/ 14 июня 2019

Бенджамин В. Предоставил отличный рабочий ответ.

Я закончил:

for file in $PATH1/*.mp4; do
    [[ $file -nt $latest ]] && latest=$file
done

if [ "$latest" -nt "$PATH2/video.mp4" ]
then
    cp $latest $destination
fi

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...