2013-02-26 3 views
0

Прошу прощения, что я не могу быть предельно конкретным, я действительно не знаю, в чем проблема, и только что начал с bash, поэтому мои навыки отладки ограничены эхом.Команда unrar работает только при выполнении вручную

У меня есть следующий фрагмент кода:

#! /bin/bash 
# post_torrent.sh 
{ 
    # Log file, file where we tell what events have been processed. 
    LOG_FILE=/Users/Server/Documents/sickbeard/logs/post_torrent.log 
    # Username for transmission remote. 
    TR_USERNAME="admin" 
    # Password for transmission remote. 
    TR_PASSWORD="1234" 
    # Get current time. 
    NOW=$(date +%Y-%m-%d\ %H:%M:%S) 
    # Source directory, should not be changed. 
    SRC_DIR="${TR_TORRENT_DIR}/${TR_TORRENT_NAME}/" 
    # Directory to store the un-compressed files in.. 
    DEST_DIR="${TR_TORRENT_DIR}/${TR_TORRENT_NAME}/" 

    cd $SRC_DIR 
    echo $NOW "SRC_DIR $SRC_DIR" >> $LOG_FILE 
    RAR=$(find . -iname "*.rar") 
    echo $NOW "RAR $RAR" >> $LOG_FILE 
    unrar x -inul "$RAR" 

    exit 0 
} & 

Файл журнала показывает, что правильные файлы используются. Когда я выполняю операторы в сценарии один за другим в терминале (я работаю на сервере mac osx), все работает, и файл извлекается. Однако, когда этот скрипт выполняется после того, как был загружен торрент, это не так.

Я пытался выяснить, почему это происходит около трех часов и до сих пор не нашел подсказки. Я думаю, что разрешения в порядке, поскольку я тестировал это. Однако я новичок в bash и не слишком хорошо знаком с командной строкой mac osx.

Заранее спасибо.

EDIT: некоторые дополнительные сведения. журнал выглядит следующим образом: 2013-02-27 00:14:42 SRC_DIR/Volumes/Мультимедиа/aa_bb/Загрузки/some_serie/ 2013-02-27 00:14:42 RAR ./some_serie.rar

Программа запускается через передачу как программа, установленная при завершении загрузки файла.

Файл, который необходимо извлечь, находится на общем внешнем жестком диске.

Надеюсь, это поможет.

+0

Dont вам нужно развязать их по порядку, в серийном порядке - значение 1, затем 2, затем 3 и т. Д.? Если это так, проблема заключается в том, что вы пытаетесь развязать их потенциально в параллели ... Возможно, это было. Простое решение - избежать торрентов архива RAR. Я был против них в течение многих лет :-) – prodigitalson

+0

Создайте новый скрипт и добавьте контент по строкам, тестируя его с выходом на терминал. Возможно, есть некоторые проблемы с вашим конкретным файлом (в настройках и т. Д.).Поэтому создайте новый скрипт с функциями, которые вам нужно использовать, и выполните попытку выполнить его. – Stepo

+0

Кажется вероятным, что RAR содержит более одного имени файла, но когда вы передаете его, чтобы разделить его следующим образом: 'unrar x -inul '$ RAR", unrar увидит все вместе вместе как один аргумент. Вы можете попытаться удалить кавычки из переменной. (Становится сложнее, если ваши имена файлов могут содержать пробелы.) – William

ответ

1

изменение линии:

unrar x -inul "$RAR" 

к:

for i in $RAR 
do 
    unrar -x inul $i 
done 

причина этого заключается в том, что $ RAR содержит все результаты, и вы хотите, чтобы разобрать каждый результат индивидуально

[ edit]
Отмечу, что вы не указали приведенные выше изменения в своем примере - что вы хотите сделать, не будет работать без них

изменение этой линии:

RAR=$(find . -iname "*.rar") 

к:

RAR=`find . -iname "*.rar"` 

Те цитаты, кстати, они серьезные акценты
добавьте вывод set -x на ваш вопрос
[/ edit]

+0

Изменен код. Без изменений. Добавлена ​​дополнительная информация, которая может помочь. – Boelensman1

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