Ошибка при вызове скрипта из другого скрипта

Я пишу пару скриптов, чтобы запустить vlc и периодически обновлять свой плейлист. update_pls.sh работает хорошо, если я его update_pls.sh из приглашения, но когда я вызываю его из start_vlc.sh , в каждом for цикла я получаю следующее:

 ./update_pls.sh: 20: ./update_pls.sh: 10#18: not found ./update_pls.sh: 20: ./update_pls.sh: 10#18==DIA: not found 

start_vlc.sh:

  #!/bin/bash echo `date` echo "A arrancar o VLC..." cvlc --loop --fullscreen --extraintfttp --http-password kepler sh update_pls.sh 

update_pls.sh:

  #!/bin/bash /usr/bin/env > /Videos/cron_env.log DIR=/Videos FILES=$DIR/* DIA=`(date +%d)` HORA=`(date +%H)` echo `date` echo "Dir: $DIR" echo "A fazer update da playlist.m3u..." > $DIR/playlist.m3u for f in $FILES do a=`(basename $f .mov | cut -b 1-2 | sed 's/[^0-9]//g')` b=`(basename $f .mov | cut -b 3-4 | sed 's/[^0-9]//g')` if [ -n "$a" ]; then : else a="99" fi if (( 10#$a<DIA)) || ((10#$a==DIA && 10#$b<=HORA )); then echo -e "$f\n" >> $DIR/playlist.m3u echo "Adicionado o video $f" fi done echo "A fazer upload da playlist para o VLC..." curl -u '':kepler "http://localhost:8080/requests/status.xml?command=pl_empty" curl -u '':kepler "http://localhost:8080/requests/status.xml?command=in_enqueue&input$ curl -u '':kepler "http://localhost:8080/requests/status.xml?command=pl_play" 

Мне не удаётся найти причину этого и будет вознаграждать любую помощь. Vasco

One Solution collect form web for “Ошибка при вызове скрипта из другого скрипта”

Ваш update_pls.sh – это скрипт bash , но когда вы вызываете его из start_vlc.sh вы используете sh который, вероятно, не запускает bash в вашей системе. Попробуйте либо изменить строку на bash update_pls.sh либо сделать chmod a+x на update_pls.sh и просто вызвать его непосредственно в качестве команды.

Несколько заметок на ваших скриптах:

В строке echo `date` , echo не нужно, просто используйте date .

Нет необходимости в скобках в таких строках, как DIA=`(date +%d)` , в том числе они запустит другой экземпляр вашей оболочки и добавят много накладных расходов на скрипт. DIA=$(date) , вероятно, является наиболее предпочтительной формой (здесь долларовые скобки заменяют обратные выходы), см. « У задников» (т. Е. `Cmd`) в * sh shells устарели? ,

Нет необходимости в : в вашем if / else, просто сделайте, if ! [ -n "$a" ]; then if ! [ -n "$a" ]; then if ! [ -n "$a" ]; then и вы можете отбросить другую часть.

Есть и другие вещи, но я думаю, этого достаточно от меня.

  • Как захватить вывод из команды в сценарии оболочки
  • Как извлечь дату и рассчитать, находится ли она в течение «х» дней с сегодняшнего дня?
  • Как постоянно выполнять резервное копирование файлов журнала?
  • Справка по сценарию awk / sed shell
  • Расширение «$ @» для пользовательских переменных
  • Игнорировать изменяемый размер «df -h» при использовании diff
  • Использование grep для поиска подстроки между двумя строковыми переменными, которые содержат пути
  • Почему «до» блок спроектирован, так как это всего лишь отрицательная версия `while`?
  • Меню Zenity Shell для более 50 серверов, как оставаться в меню сервера?
  • Автоматически вводить пароль SSH без использования SSH-ключа, «ожидать», «sshpass» или Python
  • Проблема при запуске скрипта
  • Linux и Unix - лучшая ОС в мире.