Использование сценариев Bash для экспорта результатов команд Linux Top и истории в текстовый файл - PullRequest
0 голосов
/ 20 апреля 2020

Меня попросили демо-экспорт списка результатов команды linux в один текстовый файл. Наверху и история команд кажутся проблемными

Я пробовал

top >> christopherCollins.txt
history >> christopherCollins.txt

Возможные решения, которые у меня есть ниже:

top -b -n 5 >> christopherCollins.txt
grep -v "^#" $HISTFILE >> christopherCollins.txt

Хотя top -b -n 5 >> christopherCollins.txt, кажется, работает для получения некоторых результатов из верхней команды, интересно, есть ли что-нибудь лучше?

Когда я пытаюсь экспортировать историю, grep -v "^ #" $ HISTFILE> christopherCollins.txt работает с терминал с одним>, но когда я использую два >> в качестве метода добавления в моем bashscript, кажется, что при запуске сценария процесс останавливается. Я также подумал, что если я смогу изменить порядок добавления результатов в файл, то, когда я использую grep -v "^ #" $ HISTFILE, все выглядит плохо, я могу создать только один файл, содержащий результаты истории.

Я использую следующие команды для выполнения моего сценария.

chmod +x mybashcommands.sh
bash mybashcommands.sh

Мой полный код сценария bash, приведенный ниже, с некоторыми правками для отображения разрывов между результатами команды

#!/bin/bash
echo "" >> christopherCollins.txt
echo "date" >> christopherCollins.txt
echo "" >> christopherCollins.txt
date >> christopherCollins.txt
echo "" >> christopherCollins.txt
echo "---------------------------------------------------------------" >> christopherCollins.txt
echo "hostname" >> christopherCollins.txt
echo "" >> christopherCollins.txt
hostname >> christopherCollins.txt
echo "" >> christopherCollins.txt
echo "---------------------------------------------------------------" >> christopherCollins.txt
echo "arch" >> christopherCollins.txt
echo "" >> christopherCollins.txt
arch >> christopherCollins.txt
echo "" >> christopherCollins.txt
echo "---------------------------------------------------------------" >> christopherCollins.txt
echo "uname -a" >> christopherCollins.txt
echo "" >> christopherCollins.txt
uname -a >> christopherCollins.txt
echo "" >> christopherCollins.txt
echo "---------------------------------------------------------------" >> christopherCollins.txt
echo "uptime" >> christopherCollins.txt
echo "" >> christopherCollins.txt
uptime >> christopherCollins.txt
echo "" >> christopherCollins.txt
echo "---------------------------------------------------------------" >> christopherCollins.txt
echo "whoami" >> christopherCollins.txt
echo "" >> christopherCollins.txt
whoami >> christopherCollins.txt
echo "" >> christopherCollins.txt
echo "---------------------------------------------------------------" >> christopherCollins.txt
echo "who" >> christopherCollins.txt
echo "" >> christopherCollins.txt
who >> christopherCollins.txt
echo "" >> christopherCollins.txt
echo "---------------------------------------------------------------" >> christopherCollins.txt
echo "finger" >> christopherCollins.txt
echo "" >> christopherCollins.txt
finger >> christopherCollins.txt
echo "" >> christopherCollins.txt
echo "---------------------------------------------------------------" >> christopherCollins.txt
echo "w" >> christopherCollins.txt
echo "" >> christopherCollins.txt
w >> christopherCollins.txt
echo "" >> christopherCollins.txt
echo "---------------------------------------------------------------" >> christopherCollins.txt
echo "top -b -n 5" >> christopherCollins.txt
echo "" >> christopherCollins.txt
top -b -n 5 >> christopherCollins.txt
echo "" >> christopherCollins.txt
echo "---------------------------------------------------------------" >> christopherCollins.txt
echo "history" >> christopherCollins.txt
echo "" >> christopherCollins.txt
grep -v "^#" $HISTFILE >> christopherCollins.txt
echo "" >> christopherCollins.txt
echo "END------------------------------------------------------------" >> christopherCollins.txt

1 Ответ

2 голосов
/ 20 апреля 2020

Перенаправьте всю вашу группу команд сразу:

Также обратите внимание, что переменная окружения $HISTFILE допустима только в интерактивном сеансе и пуста / не определена в области действия скрипта.

#!/usr/bin/env bash

{
  printf '\ndate\n\n'
  date
  printf '\nhostname\n\n'
  hostname
  printf '\narch\n\n'
  arch
  printf '\nuname -a\n\n'
  uname -a
  printf '\nuptime\n\n'
  uptime
  printf '\nwhoami\n\n'
  whoami
  printf '\nwho\n\n'
  who
  printf '\nfinger\n\n'
  finger
  printf '\nw\n\n'
  w
  printf '\ntop -b -n5\n\n'
  top -b -n5
  printf '\nhistory\n\n'
  grep -v "^#" "$HOME/.bash_history"
} >christopherCollins.txt

Или более программно сократить код:

#!/usr/bin/env bash

history() {
  grep -v "^#" "$HOME/.bash_history"
}

for command in 'date' 'hostname' 'arch' 'uname -a' 'uptime' 'whoami' 'who' 'finger' 'w' 'top -b -n5' 'history'; do
  printf '\n%s\n\n' "$command"
  set -- $command
  "$@"
done >christopherCollins.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...