2015-07-15 2 views
2

я пытаюсь сохранить эхо команды в лог-файл:тройник - если файл не существует, ничего не делать

echo "XXXXX" | tee -a ./directory_with_logs/my_script.log 

Это хорошо работает, когда файл my_script.log существует

XXXXX 

(XXXXX была написана к my_script.log также)

Когда my_script.log не существует, я получил что-то вроде этого

tee: ./directory_with_logs/my_script.log: No such file or directory 
XXXXX 

Я попробовал, если еще процедура проверки, если существуют файлы, а затем записать в журнал

function saveLog(){ 
if [[ -e "./directory_with_logs/my_script.log" ]] ; then 
tee -a ./directory_with_logs/my_script.log 
fi ; } 
echo "XXXXX" | saveLog 

но работает неправильно и, когда файл не существует, то ничего не происходит в XTerm, не эхо команды

Как печатать в xterm и записывать в файл журнала echo команду,

или печатать только в xterm, если файл журнала не существует?

Пожалуйста, помогите :)

+1

Есть вопросы о том, что файл * * не существует или что * каталог * нет? Потому что это не одно и то же. 'tee' должен создать файл просто отлично, но он не будет создавать каталог. –

+2

Вот и все. Также используется [команда tee для перенаправления вывода в файл в несуществующем каталоге] (http://stackoverflow.com/q/14236621/1983854). – fedorqui

+0

Кроме того, что не так, просто делая 'echo" XXXXXX ">>./Directory_with_logs/my_script.log' ??? Зачем вообще вызывать 'tee'? – twalberg

ответ

3

Причина ваш код не работает , заключается в том, что, когда файл не существует, он не потребляет стандартный ввод. Вы можете это исправить, добавив cat вызов в else отрасли, как это:

saveLog() { 
    if [[ -e "./directory_with_logs/my_script.log" ]] ; then 
    tee -a ./directory_with_logs/my_script.log 
    else 
    cat 
    fi 
} 
-3

Вам не нужно тройник, чтобы добавить файл, вот что >> для

попробовать это:

echo "XXXXX" >> ./directory_with_logs/my_script.log 
+4

Возможно, он использует 'tee -a', потому что хочет * видеть * вывод, а также добавлять к файлу. – user000001

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