Is there a way to log the stderr from ffmpeg inside the script to see why the command fails inside the script but works when run directly?
Вот так, перенаправьте поток 2, stderr, в файл в tmp
. Да, и поскольку вы не хотите, чтобы он постоянно перезаписывал файл tmp, добавьте PID к его имени:
my_command 2> /tmp/ffmpeg_error$$.log
Теперь применим к вашему ffmpeg:
ffmpeg -f x11grab -s 1000x563 -framerate 30 -i $DISPLAY+10,151 -f pulse -ac 2 -i default -c:v libx264 -preset ultrafast -tune zerolatency -x264opts keyint=30:min-keyint=10 -b:v 2000k -pix_fmt yuv420p -s 1000x562 -c:a aac -b:a 160k -ar 44100 -t '4:00:00' -threads 0 -f flv rtmp://IPADDRESS:1935/live1/$CHANNEL 2> /tmp/ffmpeg_error$$.log
Файл .bashrc
на самом деле предназначен для использования в интерактивных оболочках -, чтобы позволить ему быть источником в не -интерактивной среде, такой как bash -c
или su -c
, без ошибок, добавьте «интерактивный тест» где-нибудь в верхней части файла.
Например, начало файла Ubuntu по умолчанию .bashrc
(, скопированного из /etc/skel
при создании учетной записи ), выглядит как:
$ head /etc/skel/.bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
Итак, скорее всего, ваш.bashrc
успешно получает источник -, но возвращается до достижения команд, изменяющих ваш PATH
.