我有一个没有参数启动的交互式脚本,我希望它在当前shell会话中第一次运行时打印一个ASCII-art徽标。这有可能被检测到吗?
我忘了提到,我不想写到帮助文件,我想要这样做。有可能在外壳内检测到吗?有一些进程日志吗?
发布于 2021-02-07 15:05:26
我能想到两种方法:
首先,脚本试图创建一个名为父shell 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艺术。
发布于 2021-02-08 02:30:22
一种简单的方法,使用标志文件的日期
#!/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“,以避免干扰。
https://unix.stackexchange.com/questions/633086
复制相似问题