您当前的位置:首页 > 电脑百科 > 软件技术 > 应用软件

分享一个日常使用的一段shell脚本

时间:2022-07-08 11:03:48  来源:  作者:SuperOps

日常开发经常要简化很多操作可以用make 工具封装很多命令干活,但是在Docker 容器内有时候为了简化镜像的大小和避免风险都没有安装make ,但是又需要用很多已命令的命令执行任务,索性就用shell封装好一个类似make 的模板,如下所示

#!/usr/bin/env bash

#/ PATH=./node_modules/.bin:$PATH

#/ https://www.tldp.org/LDP/abs/html/options.html

# Similar to -v (Print each command to stdout before executing it), but expands commands

# set -o xtrace

# set -o verbose

# Abort script at first error, when a command exits with non-zero status (except in until or while loops, if-tests, list constructs)

set -o errexit

# Apply to subprocesses too

shopt -s inherit_errexit 2>/dev/null || true

# Causes a pipeline to return the exit status of the last command in the pipe that returned a non-zero return value.

set -o pipefAIl

# Attempt to use undefined variable outputs error message, and forces an exit

set -o nounset

# makes iterations and splitting less surprising

IFS=$'nt'

# full path current folder

__dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# full path of the script.sh (including the name)

__file="${__dir}/$(basename "${BASH_SOURCE[0]}")"

# name of the script

__base="$(basename ${__file} .sh)"

# full path of the parent folder

__root="$(cd "$(dirname "${__dir}")" && pwd)" # <-- change this as it depends on your app

# Log function

# This disables and re-enables debug trace mode (only if it was already set)

# Sources: https://superuser.com/a/1338887/922762 -- https://Github.com/Kurento/adm-scripts/blob/master/bash.conf.sh

shopt -s expand_aliases # This trick requires enabling aliases in Bash

BASENAME="$(basename "$0")" # Complete file name

echo_and_restore() {

echo "[${BASENAME}] $(cat -)"

# shellcheck disable=SC2154

case "$flags" in (*x*) set -x; esac

}

alias log='({ flags="$-"; set +x; } 2>/dev/null; echo_and_restore) <<<'

# Exit trap

# This runs at the end or, thanks to 'errexit', upon any error

on_exit() {

{ _RC="$?"; set +x; } 2>/dev/null

if ((_RC)); then log "ERROR ($_RC)"; else log "SUCCESS"; fi

log "#################### END ####################"

}

trap on_exit EXIT

log "==================== BEGIN ===================="

export appdir="$__dir"/

export SOURCE_FILES="$appdir tests"

function assert_env () {

source "$__dir"/".venv/bin/activate" || exit 1

echo "Pip location:"

pip_cmd=$(command -v pip)

echo "$pip_cmd"

current=$(pwd)

pip_path="$current/.venv/bin/pip"

echo "$pip_path"

if [[ "$pip_cmd" -ef "$pip_path" ]]; then

echo "paths match"

else

exit 1

fi

}

function clean () {

log "cleaning files"

find . -name '__pycache__' -exec rm -fr {} +;

find . -name '.ipynb_checkpoints' -exec rm -fr {} +;

find . -name '*.pyo' -exec rm -f {} +;

find . -name '*.pyc' -exec rm -f {} +;

find . -name '*.egg-info' -exec rm -fr {} +;

find . -name '*~' -exec rm -f {} +;

find . -name '*.egg' -exec rm -f {} +

}

function deps () {

assert_env

pip install pip-tools pip setuptools

pip-compile -v --allow-unsafe --output-file requirements/main.txt requirements/main.in &&

pip-compile -v --allow-unsafe --output-file requirements/dev.txt requirements/dev.in

}

function update () {

assert_env

# --build-isolation --generate-hashes

pip install --upgrade pip-tools pip setuptools

pip-compile -v --upgrade --allow-unsafe --output-file requirements/main.txt requirements/main.in &&

pip-compile -v --upgrade --allow-unsafe --output-file requirements/dev.txt requirements/dev.in

wait

pip-sync requirements/*.txt

}

function install {

assert_env

if ! command -v pip-sync; then echo "pip-tools not installed" && exit; fi

pip-sync requirements/*.txt

}

function lint () {

assert_env

autoflake --remove-all-unused-imports --recursive --remove-unused-variables --in-place "$appdir" --exclude=__init__.py

isort --profile black "$appdir"

black "$appdir"

}

function report () {

echo "Flake8 report:" > "$__dir"/code_report.txt

flake8 "$appdir" >> code_report.txt

echo "Bandit report:" >> code_report.txt

bandit -r "$appdir" >> "$__dir"/code_report.txt

}

function publish () {

assert_env

if ! command -v twine &>/dev/null ; then

echo "Unable to find the 'twine' command."

echo "Install from PyPI, using 'pip install twine'."

exit 1

fi

if ! pip show wheel &>/dev/null ; then

echo "Unable to find the 'wheel' command."

echo "Install from PyPI, using 'pip install wheel'."

exit 1

fi

clean

log "building package"

Python/ target=_blank class=infotextkey>Python3 setup.py sdist bdist_wheel

log "uploading to PyPi"

python3 -m twine upload dist/*

log "cleaning..."

clean

echo "You probably want to also tag the version now:"

echo "git tag -a ${VERSION} -m 'version ${VERSION}'"

echo "git push --tags"

}

function build () {

echo "build task not implemented"

}

function tester () {

echo "not implemented"

assert_env

# pytest ...

}

function buildprod {

echo "build task not implemented"

assert_env

# this runs in parallel

format & deps & tester &

wait

echo "not implemented"

# shiv ...

}

function run {

echo "running app with uvicorn"

assert_env

uvicorn --workers 2 app.main:app --reload --reload-dir "$appdir"

}

function default {

# start

clean

}

function tasks {

echo "$0 <task> <args>"

echo "Tasks:"

compgen -A function | cat -n

}

# Help message (extracted from script headers)

usage() { grep '^#/' "$0" | cut --characters=4-; exit 0; }

REGEX='(^|W)(-h|--help)($|W)'

[[ "$*" =~ $REGEX ]] && usage || true

TIMEFORMAT="Task completed in %3lR"

time ${@:-default}

 



Tags:shell   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
数据恢复新姿势:使用MySQL Shell进行更高效灵活的数据恢复
上篇文章(转战MySQL Shell!数据库备份新姿势,轻松搞定备份操作!)简单介绍了使用MySQL Shell进行数据库备份,本文基于上文的备份进行数据恢复演示操作。一、恢复单表因为上次备份的...【详细内容】
2023-12-19  Search: shell  点击:(117)  评论:(0)  加入收藏
对 Bash 感到厌倦?教你如何在 Linux 中更改默认 Shell
Bash 并不是唯一可供选择的 Shell。还存在数量众多的 Shell,它们都有一些独特的特性,例如 Zsh、Fish、Ksh 和 Xonsh。在你的系统中,你可以同时安装多个 Shell。要想将另一个 Sh...【详细内容】
2023-12-14  Search: shell  点击:(210)  评论:(0)  加入收藏
手把手教你写一个Shell脚本部署你的服务
我们都知道,在开发的过程中,有很多部署自己微服务的方式,其中有各种各样的不同操作,比如使用 docker 打包为镜像的方式,还有基础使用 jar 包的方式进行部署,但是呢?使用 jar 包部署...【详细内容】
2023-11-28  Search: shell  点击:(141)  评论:(0)  加入收藏
Linux 系统 Shell 中那些特殊变量
在Shell脚本中,$符号有多种含义,它通常用于表示变量、特殊变量或参数,今天介绍几个特殊的变量。 $0表示shell脚本文件本身 $1 ~ $n脚本的位置参数,表示脚本或函数的参数。例如,$1...【详细内容】
2023-11-14  Search: shell  点击:(219)  评论:(0)  加入收藏
Shell特殊变量
状态变量 变量 含义 应用场景 $? 上一条命令的返回值 判断命令的执行是否成功 $$ 用于获取当前shell环境的进程ID号 在脚本运行时将pid记录...【详细内容】
2023-11-14  Search: shell  点击:(72)  评论:(0)  加入收藏
Linux服务器超级实用的Shell脚本,建议收藏!
Shell 脚本是一种强大的工具,可以在各种领域中用于提高工作效率、简化任务和自动化常见工作流程。无论是系统管理、数据处理、任务自动化还是快速原型开发,Shell 脚本都是一种...【详细内容】
2023-11-07  Search: shell  点击:(298)  评论:(0)  加入收藏
Shell编程:命令行与脚本编程的结合
在计算机领域,Shell 是一个命令行解释器,它允许用户与操作系统进行交互。通过Shell,用户可以输入命令并执行各种任务。此外,Shell 还可以用于编写脚本,实现自动化管理和提高工作...【详细内容】
2023-09-07  Search: shell  点击:(215)  评论:(0)  加入收藏
PowerShell系列之PowerShell通过脚本方式运行笔记
上一篇文章讲解了Powershell通过交互环境运行命令的相关知识,今天给大家介绍实际工作当中使用最频繁的方式&mdash;&mdash;通过脚本运行,简单来说就是和咱们实际编写代码一样,先...【详细内容】
2023-08-28  Search: shell  点击:(296)  评论:(0)  加入收藏
shell中实时监视文件和目录变化:使用 inotifywait 命令
当您需要实时监视特定文件或目录的变化时,可以使用 inotifywait 命令。该命令通过监视文件系统事件并在事件发生时触发相应的操作来实现。以下是 inotifywait 命令的一般用...【详细内容】
2023-08-15  Search: shell  点击:(298)  评论:(0)  加入收藏
超级漂亮的 Shell
先来一张美图1 zsh 介绍1.1 Linux shellLinux/Unix 提供了很多种 Shell,为毛要这么多 Shell?难道用来炒着吃么?那我问你,你同类型的衣服怎么有那么多件?花色,质地还不一样。写程序...【详细内容】
2023-08-13  Search: shell  点击:(190)  评论:(0)  加入收藏
▌简易百科推荐
系统优化工具,Ultimate Windows Tweaker软件体验
电脑上的Windows优化工具年年都有,每年还会翻着花样地出现新东西,都不带重复的。每个人都可以上来折腾一番Windows...从这个角度来说,Windows系统还挺“稳定”的,经得起各种用户...【详细内容】
2024-04-10  果核剥壳    Tags:系统优化   点击:(4)  评论:(0)  加入收藏
Telegram怎么不显示在线?
在Telegram中,您可以通过进入“设置” -> “隐私与安全” -> “最后在线时间”,然后选择“没有人”或者自定义特定的人群,以隐藏自己的在线状态。这样设置后,其他用户将无法看到...【详细内容】
2024-04-04  HouseRelax    Tags:Telegram   点击:(8)  评论:(0)  加入收藏
谷歌 Gmail 新规生效:为遏制钓鱼 / 欺诈情况,日群发超 5000 封邮件账号需验证
IT之家 4 月 2 日消息,谷歌为了增强对垃圾邮件和网络钓鱼攻击的管控,今天宣布正式启用新措施:对于向 Gmail 邮箱账号日群发数量超过 5000 封的用户,需要其在域名中设置 SPF / DK...【详细内容】
2024-04-02    IT之家  Tags:Gmail   点击:(16)  评论:(0)  加入收藏
钉钉AI升级多模态:能根据图片识人、翻译、创作、多轮问答
新浪科技讯 3月28日午间消息,钉钉AI助理迎来升级,上线图片理解、文档速读、工作流等产品能力,探索多模态、长文本与RPA技术在AI应用的落地。基于阿里通义千问大模型,升级后的钉...【详细内容】
2024-03-28    新浪科技  Tags:钉钉   点击:(17)  评论:(0)  加入收藏
都2024年了,谁还在用QQ聊天啊?
你还在用 QQ 吗?之所以突然这么问,是因为前些天腾讯发了份热气腾腾的财报。随手翻了翻,发现 QQ 这个老企鹅,居然还有5.54 亿多人每个月都在坚持登录。虽说和辉煌时候没法比了,但...【详细内容】
2024-03-26    差评  Tags:QQ   点击:(11)  评论:(0)  加入收藏
腾讯QQ浏览器工具权益卡上线PC端,每月最低6元
IT之家 1 月 29 日消息,腾讯 QQ 浏览器此前在手机端上线工具权益卡,现将部分权益适用范围拓展至 PC 端,每月 10 元,连续包月为 6 元。开通后用户可以在 QQ 浏览器软件内享有由腾...【详细内容】
2024-01-29    IT之家  Tags:QQ浏览器   点击:(87)  评论:(0)  加入收藏
开源工具Ventoy更新:新增对FreeBSD 14.0的支持
近日,开源装机工具Ventoy发布了1.0.97版本的更新。本次更新的主要亮点是新增了对FreeBSD 14.0版本的支持,并修复了启动问题以及解决了几个Linux独有的bug等。同时,官方还修复了...【详细内容】
2024-01-25    中关村在线  Tags:Ventoy   点击:(42)  评论:(0)  加入收藏
微软Copilot Pro来了:个人用户也能在Word里用GPT-4,20美元/月
面向个人用户的微软Copilot会员版来了。一个月多交20刀(约合人民币142元),Microsoft 365个人版/家庭版用户就能在Word、Excel、PPT等Office全家桶中用上GPT-4。就像这样,不用在C...【详细内容】
2024-01-16    量子位  Tags:Copilot Pro   点击:(97)  评论:(0)  加入收藏
微软 Edge 浏览器支持双引擎同时搜索功能,便利与槽点并存
IT之家 1 月 15 日消息,微软广告和网络服务部门首席执行官 Mikhail Parakhin 近日透露了一个微软 Edge 浏览器的隐藏功能:双引擎同时搜索。顾名思义,该功能允许用户同时使用两...【详细内容】
2024-01-16    IT之家  Tags:Edge   点击:(65)  评论:(0)  加入收藏
11个面向设计师的必备AI工具
译者 | 布加迪审校 | 重楼在当今快速发展的设计领域,人工智能(AI)工具已成为不可或缺的创新催化剂。这些工具专门用于提高效率和创造力,从而重新定义传统的设计方法。AI正在彻底...【详细内容】
2024-01-09    51CTO  Tags:AI工具   点击:(109)  评论:(0)  加入收藏
站内最新
站内热门
站内头条