Как создать простой файл журнала из скрипта

Я пытаюсь создать простой файл журнала с именем «users.txt», который содержит имя пользователя, полное имя и домашний каталог введенного имени пользователя. Я также хочу включить время первоначального запуска сценария.

Какие-либо предложения?

Имя скрипта называется catbash.sh

Я пробовал такие вещи, как catbash.sh > user.txt

Но я понятия не имею, как получить конкретную информацию и т.

clear
LOGFILE=/home/student/gg193/FileTypes/TextFiles/ShellScripts/user.txt

read -p "What is your username?" username
read -p "May I know your name please? " name surname

echo "$(date) $username $name $surname $LOGFILE" >> $LOGFILE

TIME=$(date "+%H")

if [ $TIME -ge 0 -a $TIME -lt 12 ]
then
        echo "\nGood Morning, $surname"
elif [ $TIME -ge 12 -a $TIME -lt 18 ] 
then
        echo "\nGood afternoon $surname"
else 
        echo "\nGood evening $surname"
fi

echo "1. nonblank\n2. number\n3. ends\n4. nends\n"

while : 
do
    read INPUT_STRING
    case $INPUT_STRING in

        nonblank)
            NonEmptyLine=$(cat catbash.sh | sed '/^\s*$/d' | wc -l)
            echo "\nNumber of Non-Empty Lines are:" $NonEmptyLine
            break
            ;;
        number)
            EmptyLine=$(grep -cvP '\S' catbash.sh)
            echo "\nNumber of Empty Lines are:" $EmptyLine
            break
            ;;
        ends)
            echo "================================================================================ = "
            sed 's/$/$/' catbash.sh
            echo "================================================================================ = "
            break
            ;;
        nends)
            NonEmptyLine=$(cat catbash.sh | sed '/^\s*$/d' | wc -l)
                        echo "\nNumber of Non-Empty Lines are:" $NonEmptyLine
            EmptyLine=$(grep -cvP '\S' catbash.sh)
                        echo "\nNumber of Empty Lines are:" $EmptyLine
            echo "================================================================================ = "
            sed 's/$/$/' catbash.sh
            echo "================================================================================ = "
            break
            ;;
        *)
            echo "\nSorry, I don't understand"
            ;;
    esac
done

DURATION=$(ps -o etime= -p "$$")
echo "\nAmount of time that has passed since the script was initially executed:" $DURATION

echo "\nThanks for using catbash.sh!"
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
1 166
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны вести журнал изнутри скрипта sh. Например, вы можете echo указать нужную информацию на терминале (что вы уже делаете), а затем добавить | tee -a $LOGFILE (определить LOGFILE вверху, чтобы вам нужно было изменить только один раз, если вам нужно другое имя/местоположение файла).

В качестве дальнейших улучшений вы можете определить свою собственную функцию ведения журнала или даже изучить существующие. Например, более простая функция регистратора может принимать 2 аргумента - сообщение, имя файла. Само сообщение может состоять из имени пользователя, даты/времени и т. д. по вашему желанию.

С информацией, которая в настоящее время находится в вашем вопросе, это лучший указатель, который я могу дать.

Я определил LOGFILE вверху под названием LOGFILE=/home/student/gg193/FileTypes/TextFiles/user.txt, а под ним у меня есть echo'd echo "Time: $(date)." >> $LOGFILE это правильно?

Gentian Gashi 09.04.2019 20:47
LOGFILE=/home/student/gg193/FileTypes/TextFiles/ShellScripts‌​/user.txtread -p "What is your username?" usernameread -p "May I know your name please? " name surnameecho "$(date) $username $name $surname $LOGFILE" >> $LOGFILE Добавление этого теперь создало сообщение об ошибке «Cannot Fork on Line 29», что теперь?
Gentian Gashi 09.04.2019 21:01

Что такое строка 29 в вашем сценарии оболочки? Я попробовал это в своем сценарии оболочки, и он работал нормально, и я вижу новый файл журнала.

perennial_noob 09.04.2019 21:30
NonEmptyLine=$(cat catbash.sh | sed '/^\s*$/d' | wc -l) это строка 29. код правильный, не знаю, почему он не работает
Gentian Gashi 09.04.2019 21:32

Эта линия прекрасна, и она работает для меня. Если вы по-прежнему получаете сообщения об ошибках «невозможно разветвить», это указывает на ограничения для новых открытых файлов, которые могут быть очень низкими. Это ваша личная машина или общая машина?

perennial_noob 09.04.2019 21:41

Это моя личная машина, НО линукс на сервере, я подключаюсь к нему с помощью PuTTY

Gentian Gashi 09.04.2019 21:44

Да, ваш скрипт находится на удаленном сервере. Я предполагаю, что у вас нет sudo привилегий. Если вы это сделаете, вы можете попробовать изменить некоторые ограничения. Даже в противном случае проблема связана с той строкой 29, которая пытается cat файл. Попробуйте просто заменить эту строку на NonEmptyLine=0. Если это работает, это указывает на очень низкий лимит открытых файлов для вашей учетной записи.

perennial_noob 09.04.2019 21:48

Другие вопросы по теме