我最喜欢的 Bash 小技巧

使用别名和其他快捷方式来提高你的工作效率,避免经常忘记的事情。
251 位读者喜欢这个。
bash logo on green background

Opensource.com

当你整天与电脑打交道时,找到可重复的命令并标记它们以便以后轻松使用是非常棒的。它们都静静地待在 ~/.bashrc(对于 Zsh 用户则是 ~/.zshrc)中,等待着帮助你改善你的工作效率!

在这篇文章中,我分享了一些我最喜欢的这些辅助命令,用于我经常忘记的事情,希望它们也能为你节省一些时间。

执行完毕时通知

当我在使用较长时间运行的命令时,我经常需要同时处理多项任务,然后回头检查操作是否已完成。但现在不用了,可以使用这个有用的 say 调用(这是在 MacOS 上;根据你的本地环境进行更改)

function looooooooong {
    START=$(date +%s.%N)
    $*
    EXIT_CODE=$?
    END=$(date +%s.%N)
    DIFF=$(echo "$END - $START" | bc)
    RES=$(python -c "diff = $DIFF; min = int(diff / 60); print('%s min' % min)")
    result="$1 completed in $RES, exit code $EXIT_CODE."
    echo -e "\n⏰  $result"
    ( say -r 250 $result 2>&1 > /dev/null & )
}

此命令标记命令的开始和结束时间,计算所花费的分钟数,并播报调用的命令、所花费的时间和退出代码。我发现这在简单的控制台蜂鸣声不起作用时非常有用。

安装助手

我从 Lucid 版本开始使用 Ubuntu,我需要学习的第一件事是如何安装软件包。我添加的第一个别名之一就是这个助手(基于当时的模因命名)

alias canhas="sudo apt-get install -y"

GNU Privacy Guard (GPG) 签名

万一我必须签署一封 GPG 电子邮件,而没有扩展或应用程序来为我做这件事,我会进入命令行并使用这些非常笨拙的别名

alias gibson="gpg --encrypt --sign --armor"
alias ungibson="gpg --decrypt"

Docker

有很多 Docker 命令,但有更多的 docker compose 命令。我过去总是忘记 --rm 标志,但现在使用这些有用的别名就不会了

alias dc="docker-compose"
alias dcr="docker-compose run --rm"
alias dcb="docker-compose run --rm --build"

Google Cloud 的 gcurl 助手

这个对我来说相对较新,但是它有详细的文档。 gcurl 是一个别名,用于确保在使用本地 curl 命令时,当与 Google Cloud API 一起使用时,可以获取所有正确的标志以及身份验证标头。

Git 和 ~/.gitignore

我经常使用 Git,所以我有一个专门用于 Git 助手的区域。

我最有用的助手之一是我用来克隆 GitHub 存储库的助手。不必运行

git clone git@github.com:org/repo /Users/glasnt/git/org/repo

我设置了一个克隆函数

clone(){
    echo Cloning $1 to ~/git/$1
    cd ~/git
    git clone git@github.com:$1 $1
    cd $1
}

即使我每次进入我的 ~/.bashrc 文件时总是忘记并咯咯地笑,我也有我的“刷新上游”命令

alias yoink="git checkout master && git fetch upstream master && git merge upstream/master"

Git-ville 的另一个助手是全局忽略文件。在你的 git config --global --list 中,你应该看到一个 core.excludesfile。如果没有,创建一个,并填写你总是放入各个 .gitignore 文件中的内容。作为 MacOS 上的 Python 开发人员,对我来说,这是

.DS_Store     # macOS clutter
venv/         # I never want to commit my virtualenv
*.egg-info/*  # ... nor any locally compiled packages
__pycache__   # ... or source
*.swp         # ... nor any files open in vim

你可以在 Gitignore.io 或 GitHub 上的 Gitignore 存储库 上找到其他建议。

轮到你了

你最喜欢的辅助命令是什么?请在评论中分享它们。

接下来要读什么
User profile image.
多年来,凯蒂扮演了许多不同的角色。她以前是多种语言的软件开发人员,多种操作系统的系统管理员,以及许多不同主题的演讲者。当她没有改变世界时,她喜欢烹饪、挂毯,并研究各种应用程序堆栈处理表情符号的效果。

9 条评论

这些别名绝对是我今天最精彩的部分! yoink 确实?

我喜欢 "yoink"! :)
我的一个别名:alias untar='tar -zxvf '
因为你知道你并不总是能记住正确的选项 :)
https://www.xkcd.com/1168/

祝你编程愉快!

更新并清理我所有的 HomeBrew 项目

alias buu=‘brew update && brew upgrade && brew cleanup’

使 Terminal 识别我所做的任何更新,而无需关闭并重新打开窗口

alias tsrc=‘source ~/.bash_profile’

alias editenv='sudo -H nano /etc/environment'
alias editalias='sudo nano ~/.bash_aliases'
alias sourcealias='source ~/.bash_aliases'

因为我太笨了,记不住这些位置

killscreen() {
screen -X -S "$1" quit
screen -ls
}

我永远也记不住杀死屏幕的正确参数

docker-sh() {
docker exec -it $1 /bin/bash
}

bash 进入 docker,我经常这样做,不想输入那么多字

composeup() {
docker-compose --compatibility up -d
}

我的一些 compose 文件需要兼容性,有了这个,我永远不会忘记

alias vi='nano'
alias vim='nano'

去他妈的 vi/vim

alias python='python3'
alias pip='python3 -m pip'

不,我不想使用 python 2

alias gitp='git pull origin master'

另一个只是为了简短

alias ports='netstat -tuplen |sed -n "s/^.*127.0.0.1:\([0-9]*\).*$/\1/p"'
给我所有的 localhost 端口,我用它来检查端口是否打开以用于 docker 服务

subdomains(){
for f in /etc/nginx/sites-available/*;do cat $f |tr '\n' ' ' | sed -nE "s/^.*server_name\s (\w*\.\w*.\w*).*proxy_pass.*\:.*\:([0-9]*).*/\2 \1 \n/p"; done
}

这显示了我的可用 nginx 站点中配置的所有子域及其代理传递 localhost 端口。 用于确定哪个容器正在为哪个子域提供服务

我为我的项目使用了类似的东西,
alias testdemall='.for script in $(ls | grep '^[0-9]*_.*.sh'); do
echo "正在执行脚本 '$script'。"
./$script
done'
从 MLL 项目中获得的,并将其用于大量包含大量文件的冗长构建。

1) 在 git 文件夹中显示当前分支
git_branch() { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'; }
export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(git_branch)\[\033[00m\]$ "

2) 别名 (log) 用于更方便地查看 git log
alias log='git log --decorate=full --date=relative --date-order --format=format:"%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)"'

alias yolo='git commit -am "DEAL WITH IT" && git push -f origin master'

很笨拙,但是当我在一个孤立的 repo(而不是项目 repo)中工作,并且必须快速离开办公室(例如,消防演习)时,在锁定和放弃我的笔记本电脑之前,点击五个键感觉很棒。

使用帮助函数

help()
{
cat <

Creative Commons License此作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.