2013-08-04 2 views
0

Я использую S3cmd в сценарии bash при запуске. Если он вернет код ошибки, скрипт готов что-то сделать. Тем не менее, s3cmd кажутся (иногда) сломать все это при возникновении ошибки и выводит информацию на экран. Это просто мой сценарий.Предотвращение взлома моего скрипта Bash

Как предотвратить программу, нарушающую мой сценарий Bash? Если что-то не так, я просто хочу, чтобы скрипт bash продолжал делать следующее в очереди.

EDIT: Кажется, это происходит только с /etc/rc.local. Если я запустил скрипт как что-то еще (/ home/whateverscript), он делает то, что я хочу.

+1

Под словом вы подразумеваете, что скрипт перестает работать? –

+0

Тогда у вас, вероятно, есть относительные пути, нарушающие ваше исполнение. Кроме того, как вы сказали, скрипт запускается при запуске, вы можете отключить переменные, на которых полагается ваш код. – Rubens

+0

Да, @VaughnCato, но это похоже на случай, когда он запускается как rc.local. – Paolo

ответ

0

Может быть, вы можете обернуть ваш

s3cmd sync --recursive --delete-removed --config="$HEMMAPPEN/.s3cfg" "$SOURCEFOLDER" "$TARGETFOLDER/" 

в сценарии, как показано ниже,

outputText=$(s3cmd sync --recursive --delete-removed --config="$HEMMAPPEN/.s3cfg" "$SOURCEFOLDER" "$TARGETFOLDER/" 2>&1;echo ,$?)

Это будет перенаправить поток ошибок на стандартный вывод (2>&1) и переменной outputText будет содержать ваш желаемый результат (в форме * stdout, exit_status *) команды, если это потребуется позже в контексте сценария.

Если вы не хотите, стандартный вывод, а только состояние команды в outputText, вы можете использовать следующие

status=$(s3cmd sync --recursive --delete-removed --config="$HEMMAPPEN/.s3cfg" "$SOURCEFOLDER" "$TARGETFOLDER/" > /dev/null 2>&1;echo $?)

статус переменная будет содержать статус Teh команды, которая была запустить.

Надеюсь, это имеет смысл. Пожалуйста, прокомментируйте, если он не решил вашу проблему.

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