Если вы не хотите видеть интерактивный дисплей, вы можете позволить ему выводить только один -снимок, после чего вам больше не нужна опция «ssh -t»:
top -n 1 -b
Я могу придумать 2 способа:
Во-первых, ваш скрипт пытается создать файл с PID родительской оболочки в имени
#!/usr/bin/env bash
already_run_file=/tmp/${0##*/}.$PPID
if [[ ! -f $already_run_file ]]; then
echo "ascii art"
touch "$already_run_file"
fi
...
Недостаток :эти файлы должны быть очищены... каким-то образом.
Два :создают функцию-оболочку для скрипта. Предположим, ваша программа называется myscript
, тогда, если переменная окружения не существует, добавьте параметр «-A» к вызову программы :
myscript() {
if [[ ! -v MYSCRIPT_HAS_RUN ]]; then
export MYSCRIPT_HAS_RUN=$(printf '%(%s)T' -1) # timestamp
set -- -A "$@"
fi
command myscript "$@"
}
И добавить кmyscript
:
while getopts :A opt; do
[[ $opt == A ]] && echo "$ascii_art"
done
shift $((OPTIND-1))
Или распечатайте ASCII-арт из функции.
Простой способ, используя дату файла флага
#!/bin/bash
me="${0##*/}"
typeset -i first=0
flag="/tmp/$USER.$me.run"
[[ -f "$flag" ]] || touch --date=yesterday "$flag"
if [ $(date "+%d") -ne $(date "+%d" -r "$flag") ] ;then
first=1
fi
В конце $first
равно 1
для первого выполнения за всю историю и первого ежедневного выполнения, или 0
, если нет. Файл флага называется «Username.Scriptname», чтобы избежать помех.