2016-02-21 3 views
1

Я понимаю, что на этот вопрос был дан ответ, однако в коде есть странная ошибка.Передача переменных PHP с пробелами в bash

Вот Баш код, который получает переменную $ название из PHP сценария:

#!/bin/bash 
url=$1 
type=$2 
bitrate=$3 
vidid=$4 
title=$TITLE 

TMP_FILE="youtube-mp3-$RANDOM.tmp" 

youtube-dl --get-title --get-url --get-filename "$url" > $TMP_FILE 2> "/tmp/$TMP_FILE.err" 

exec 42< $TMP_FILE 

while read video_title <&42 ; do 
    read video_url <&42 
    read video_filename <&42 
    if [ "$type" = "vorbis" ]; then 
    #youtube-dl -x --prefer-ffmpeg --audio-format vorbis --audio-quality "$bitrate" "$url" 
    echo "$title" > title-test 
    else 
    #youtube-dl -x --prefer-ffmpeg --audio-format "$type" --audio-quality "$bitrate" "$url" 
    echo "$title" > title-test 
    fi 
done 

exec 42<&- 
rm -f $TMP_FILE 

А вот PHP код, который посылает переменную Баш:

$link = $cmd; 
$video_id = explode("?v=", $link); 
$video_id = $video_id[1]; 
$yturl = "http://www.youtube.com/watch?v=".$video_id; 

$page = file_get_contents($yturl); 
$doc = new DOMDocument(); 
$doc->loadHTML($page); 

$title_div = $doc->getElementById('eow-title'); 
$title = $title_div->nodeValue; 
putenv("TITLE=$title"); 

Он правильно делает повторите заголовок видео YouTube, чтобы «title-test», но когда он это делает, он отправляет его так: {enter} {пробел} {пробел} {пробел} {пробел} $ title

Итак, есть bla nk перед заголовком видео, что неправильно работает, когда я пытаюсь выполнить mv, rm или cp переменную $ title в bash, и я не знаю, почему это происходит.

ответ

2

Давайте посмотрим на пример: Элемент, имеющий идентификатор = «EOW-заголовок» в документе на https://www.youtube.com/watch?v=FTXN5nOstRs выглядит следующим образом:

<span id="eow-title" class="watch-title " dir="ltr" title="Richard Dawkins exploding at bullshit in the Bible"> 
    Richard Dawkins exploding at bullshit in the Bible 
    </span> 

И так как нет ничего говорить LibXML что начальные/конечные пробельные символы не имеют значения, значение узла этого элемента: «{enter} {пробел} {пробел} {пробел} {пробел} Ричард Докинз ...».

Вы можете избавиться от пробелов, например. через trim().

+0

Большое спасибо. Trim отлично работает :) – skillascii

Смежные вопросы