Как выполнить строки в сценарии bash для использования в SQL-Statement? [закрыто]

Я нашел довольно полезным ffmpeg2theora, который сохранил качество оригинального видео (full HD), запустив команду

ffmpeg2theora in_file.mkv -o out_file.ogg
1
задан 7 February 2014 в 23:53

2 ответа

Кажется, что RDFile не существует в вашем первом скрипте. Что у вас есть в /home/bono/RD/BV-OUT/allto468? Являются ли они именами файлов, которые действительно существуют в /home/bono/RD/BV-OUT/?

Я бы добавил тест посередине, чтобы проверить, действительно ли построенный путь существует, например:

#!/bin/bash
INPath="/home/bono/RD/BV-OUT/"

while read line; do
    RD="$line"
    RDFile="$INPath$RD"
    echo $RDFile

    if ! test -f "$RDFile"; then
        echo error: file does not exist: $RDFile
        continue
    fi

    ###MYSQLs:
    mysql -u root -D RD --local-infile << EOF
LOAD DATA LOCAL INFILE '$RDFile'
 INTO TABLE bv_tmp_all FIELDS TERMINATED BY ';' LINES TERMINATED BY '\r\n';
EOF
    ##### EOSQL
done < /home/bono/RD/BV-OUT/allto468
3
ответ дан 24 May 2018 в 12:03
  • 1
    Спасибо. Тест говорит, что файл не существует !!! Но если я использую результат эха напрямую, чем работает ... :( Эхо показывает правильный путь. Что не так с concate? – Bono 8 February 2014 в 00:06
  • 2
    Вы запускаете скрипт с другим пользователем? Если сценарий работает как другой пользователь, возможно, что у пользователя нет разрешения на содержащую директорию, что приведет к сбою теста. – janos 8 February 2014 в 00:12
  • 3
    Я root и дал 777 директории – Bono 8 February 2014 в 00:17
  • 4
    И когда вы являетесь пользователем root, можете ли вы прочитать содержимое этого файла? Например, с sudo head /path/to/file? – janos 8 February 2014 в 00:19
  • 5
    Да, у меня все права .... :( – Bono 8 February 2014 в 00:21

Это выглядит как котировочная проблема для меня. Чтобы получить замену переменных, используйте '' ', а не "'", то есть замените:

mysql -u root -D RD --local-infile << EOF  
LOAD DATA LOCAL INFILE '$RDFile'  
INTO TABLE bv_tmp_all FIELDS TERMINATED BY ';' LINES TERMINATED BY '\r\n';  
EOF  

на:

mysql -u root -D RD --local-infile << EOF
LOAD DATA LOCAL INFILE "$RDFile"
INTO TABLE bv_tmp_all FIELDS TERMINATED BY ';' LINES TERMINATED BY '\r\n';
EOF

Чтобы проверить смешные символы в имя файла, echo "$RDFile" | od -bc.

0
ответ дан 24 May 2018 в 12:03

Другие вопросы по тегам:

Похожие вопросы: