it-swarm.cn

一个人的.bashrc可以添加什么有用的东西?

有没有什么是您无法缺少的,将使我的生活SO更轻松?这是我使用的一些东西(“磁盘空间”和“文件夹”特别方便)。

# some more ls aliases
alias ll='ls -alh'
alias la='ls -A'
alias l='ls -CFlh'
alias woo='fortune'
alias lsd="ls -alF | grep /$"

# This is GOLD for finding out what is taking so much space on your drives!
alias diskspace="du -S | sort -n -r |more"

# Command line mplayer movie watching for the win.
alias mp="mplayer -fs"

# Show me the size (sorted) of only the folders in this directory
alias folders="find . -maxdepth 1 -type d -print | xargs du -sk | sort -rn"

# This will keep you sane when you're about to smash the keyboard again.
alias frak="fortune"

# This is where you put your hand rolled scripts (remember to chmod them)
PATH="$HOME/bin:$PATH"
141
Gareth

我有一个提取档案的小脚本,我在网上找到了它:

extract () {
   if [ -f $1 ] ; then
       case $1 in
           *.tar.bz2)   tar xvjf $1    ;;
           *.tar.gz)    tar xvzf $1    ;;
           *.bz2)       bunzip2 $1     ;;
           *.rar)       unrar x $1       ;;
           *.gz)        gunzip $1      ;;
           *.tar)       tar xvf $1     ;;
           *.tbz2)      tar xvjf $1    ;;
           *.tgz)       tar xvzf $1    ;;
           *.Zip)       unzip $1       ;;
           *.Z)         uncompress $1  ;;
           *.7z)        7z x $1        ;;
           *)           echo "don't know how to extract '$1'..." ;;
       esac
   else
       echo "'$1' is not a valid file!"
   fi
 }
81
Gert M

由于我使用了很多不同的机器,因此我的.bashrc始终将命令Prompt设置为除其他外包括我当前登录的服务器的名称。这样,当我深入telnet/ssh三个级别时,我不会在错误的窗口中键入错误的内容。真的很烂rm -rf .在错误的窗口中! (注意:在家中,所有计算机上均禁用telnet。在工作中,ssh并非始终启用,并且我没有对很多计算机的root访问权限。)

我有一个脚本~/bin/setprompt由我的.bashrc, 其中包含:

RESET="\[\017\]"
NORMAL="\[\033[0m\]"
RED="\[\033[31;1m\]"
YELLOW="\[\033[33;1m\]"
WHITE="\[\033[37;1m\]"
SMILEY="${WHITE}:)${NORMAL}"
FROWNY="${RED}:(${NORMAL}"
SELECT="if [ \$? = 0 ]; then echo \"${SMILEY}\"; else echo \"${FROWNY}\"; fi"

# Throw it all together 
PS1="${RESET}${YELLOW}\h${NORMAL} \`${SELECT}\` ${YELLOW}>${NORMAL} "

此脚本将“提示”设置为主机名,后跟:)如果最后一个命令成功,则:(如果最后一条命令失败。

39
Eddie

手册页的颜色更少,使手册页更易于阅读:

export LESS_TERMCAP_mb=$'\E[01;31m'
export LESS_TERMCAP_md=$'\E[01;31m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;44;33m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;32m'

也可以通过安装最多并将其用作MANPAGER env变量来获得彩色手册页。如果您不仅要为男性使用此寻呼机,请使用PAGER变量,如下所示:

export PAGER="/usr/bin/most -s"
25
oyvindio

没有更多的cd ../../../ ..而是4

如果作为参数传递的数字默认增加1,则增加许多dirs(在stackoverflow.com中的注释链接中找到并进行了一些修改)

up(){
  local d=""
  limit=$1
  for ((i=1 ; i <= limit ; i++))
    do
      d=$d/..
    done
  d=$(echo $d | sed 's/^\///')
  if [ -z "$d" ]; then
    d=..
  fi
  cd $d
}
24
Alberto Zaccagni

我处理许多不同的机器,所以我最喜欢的之一是我经常需要SSH到的每台机器的别名:

alias claudius="ssh [email protected]"

设置一个好的 .ssh/configssh键 使机器之间的跳跃更加容易。

我最喜欢的另一个别名是用于向上移动目录:

alias ..="cd .."
alias ...="cd ../.."
alias ....="cd ../../.."
alias .....="cd ../../../.."

还有一些用于ls(和错别字)的常用变体:

alias ll="ls -l"
alias lo="ls -o"
alias lh="ls -lh"
alias la="ls -la"
alias sl="ls"
alias l="ls"
alias s="ls"

历史记录可能非常有用,但是默认情况下,在大多数发行版中,每个Shell退出都会使您的历史记录消失,并且开始时没有太多意义。我喜欢有10,000行的历史:

export HISTFILESIZE=20000
export HISTSIZE=10000
shopt -s histappend
# Combine multiline commands into one in history
shopt -s cmdhist
# Ignore duplicates, ls without options and builtin commands
HISTCONTROL=ignoredups
export HISTIGNORE="&:ls:[bf]g:exit"

这样一来,如果我知道我之前做过某件事但不记得具体内容,可以快速history | grep foo将有助于缓和我的记忆。

我经常发现自己通过awk管道输出以获取输出的特定列,例如df -h | awk '{print $2}'查找每个磁盘的大小。为了简化此过程,我在.bashrc中创建了一个函数fawk

function fawk {
    first="awk '{print "
    last="}'"
    cmd="${first}\$${1}${last}"
    eval $cmd
}

我现在可以运行df -h|fawk 2可以节省很多打字时间。

如果您需要指定定界符(,例如,则awk -F:/etc/passwd),该函数显然无法处理。 此要点 中的稍作改动的版本可以在字段编号之前处理任意awk个参数(但仍需要标准输入)。

19
Drew Stephens

GPG加密bashrc

我确定我们都有想要放入bashrc中的内容,这些内容我们不希望sudoers易于阅读。我对此的解决方案是:

if [ -f ~/.bash_private.gpg ]; then
   eval "$(gpg --decrypt ~/.bash_private.gpg 2>/dev/null)"
fi

我有一个GPG代理来做到这一点,因此我只需要每隔几个小时输入一次私钥的密码。您仍然必须对系统用户有所信任,因为您定义的变量,函数和别名可以从RAM中提取。但是,我主要将其用于笔记本电脑。如果被盗,我不希望有人轻易看到类似的东西:

alias MYsql='mysql -uadmin -psecret'
wglatest(){ wget -O https://admin:[email protected]/latest; }
15
Bruno Bronosky

这是一个很棒的资源:

向我们展示您的.bashrc

12
devin

我曾经在各处进行设置,但后来意识到最好记住“手动”操作,因为这意味着我会:1)完全了解正在发生的事情,以及2)即使这些功能都可以使用我的自定义.bashrc未安装。

这些天,我唯一使用别名的方法是减少重复输入的长行(例如alias myhost='ssh -T [email protected] screen -dAr'

12
pjz

一个那里的衬板和微小的脚本可能会永远持续下去。我建议使用bash并自己编写东西。在 http://www.commandlinefu.com 上有一些不错的短bash东西。这里有几件事。

#use extra globing features. See man bash, search extglob.
shopt -s extglob
#include .files when globbing.
shopt -s dotglob
#When a glob expands to nothing, make it an empty string instead of the literal characters.
shopt -s nullglob
# fix spelling errors for cd, only in interactive Shell
shopt -s cdspell
# vi mode
set -o vi

s() { # do Sudo, or Sudo the last command if no argument given
    if [[ $# == 0 ]]; then
        Sudo $(history -p '!!')
    else
        Sudo "[email protected]"
    fi
}

Prompt_command() {
    p=$PWD  # p is much easier to type in interactive shells
    # a special IFS should be limited to 1 liners or inside scripts.
    # Otherwise it only causes mistakes.
    unset IFS
}
Prompt_COMMAND=Prompt_command


# smart advanced completion, download from
# http://bash-completion.alioth.debian.org/
if [[ -f $HOME/local/bin/bash_completion ]]; then
    . $HOME/local/bin/bash_completion
fi


extract () { # extract files. Ignore files with improper extensions.
    local x
    ee() { # echo and execute
        echo "[email protected]"
        $1 "$2"
    }
    for x in "[email protected]"; do
        [[ -f $x ]] || continue
        case "$x" in
            *.tar.bz2 | *.tbz2 )    ee "tar xvjf" "$x"  ;;
            *.tar.gz | *.tgz ) ee "tar xvzf" "$x"   ;;
            *.bz2 )             ee "bunzip2" "$x"   ;;
            *.rar )             ee "unrar x" "$x"   ;;
            *.gz )              ee "gunzip" "$x"    ;;
            *.tar )             ee "tar xvf" "$x"   ;;
            *.Zip )             ee "unzip" "$x"     ;;
            *.Z )               ee "uncompress" "$x" ;;
            *.7z )              ee "7z x" "$x"      ;;
        esac
    done
}
9
Ian Kelling

如果您是sysadmin并经常使用root特权,则对Bash的一些提示:

shopt -o noclobber

如果您重定向输出(>文件名),这将防止您意外破坏已经存在的文件的内容。您始终可以使用> |文件名强制覆盖。

9
Cyberdrow

我的bashrc中有以下内容

function __setprompt {
  local BLUE="\[\033[0;34m\]"
  local NO_COLOUR="\[\033[0m\]"
  local SSH_IP=`echo $SSH_CLIENT | awk '{ print $1 }'`
  local SSH2_IP=`echo $SSH2_CLIENT | awk '{ print $1 }'`
  if [ $SSH2_IP ] || [ $SSH_IP ] ; then
    local SSH_FLAG="@\h"
  fi
  PS1="$BLUE[\$(date +%H:%M)][\u$SSH_FLAG:\w]\\$ $NO_COLOUR"
  PS2="$BLUE>$NO_COLOUR "
  PS4='$BLUE+$NO_COLOUR '
}
__setprompt

在本地计算机上,它看起来像:

[17:57][user:~]$

但在远程(通过ssh)上是:

[17:57][[email protected]:~]$
8
Anders Rasmussen

我已经在我的.bashrc文件中保存了一段时间,并且发现它很有帮助。如果您要登录,则在登录时会自动显示“开始”屏幕,这样,当您的网络连接中断或发生任何故障时,您就不会丢失所做的任何事情。它应该放在最后。

if [ "$PS1" != "" -a "${STARTED_SCREEN:-x}" = x  -a "${SSH_TTY:-x}" != x ]
then
STARTED_SCREEN=1 ; export STARTED_SCREEN
[ -d $HOME/lib/screen-logs ] || mkdir -p $HOME/lib/screen-logs

sleep 1
screen -U -RR && exit 0

echo "Screen failed! continuing with normal bash startup"
fi
6
baudtack

我有几点:

# stop the pc speaker ever annoying me :)
setterm -bfreq 0

# don't put duplicate lines in the history. See bash(1) for more options
HISTCONTROL=ignoredups
# ... and ignore same sucessive entries.
HISTCONTROL=ignoreboth

# Expand the history size
HISTFILESIZE=10000 
HISTSIZE=100

# commands with leading space do not get added to history
HISTCONTROL=ignorespace

# am I on the internet?
alias p4='ping 4.2.2.2 -c 4'

# pwsafe
alias pw='pwsafe -p'

# ls aliases
alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'
alias lt='ls -laptr' #oldest first sort
alias labc='ls -lap' #alphabetical sort

# cd aliases
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'

# cd into the old directory
alias bd='cd "$OLDPWD"'

# install a package and automatically respond yes to confirmation Prompt
alias ins="Sudo aptitude install"

# remove a package and its configuration files
alias remp="Sudo aptitude purge"

# search for a package - apt-cache and aptitude search in different ways
# so have both
alias searchc="apt-cache search"
alias search="aptitude search"
alias show="aptitude show"
5
Hamish Downer

无论如何,您需要fortune个别名?

我喜欢创建一个cdd别名,该别名将我带到当前最有可能在该服务器上工作的任何地方。

PATH重定义确实属于.bash_profile,而不是.bashrc

在我通常使用大量screens的服务器上,我的.bashrc将具有:

alias s1="screen -dr chaos1"
alias s2="screen -dr chaos2"
alias s3="screen -dr chaos3"
# ... and so on

((例如,screens是screen -U -S chaos1。)

5
chaos

除其他事项外,我将一些默认值设置得更小,防止意外关闭终端并启用历史记录的向前导航:

# ignore case, long Prompt, exit if it fits on one screen, allow colors for ls and grep colors
export LESS="-iMFXR"

# must press ctrl-D 2+1 times to exit Shell
export IGNOREEOF="2"

# allow ctrl-S for history navigation (with ctrl-R)
stty -ixon

尾部/ var/log中的所有日志

alias logs="find /var/log -type f -exec file {} \; | grep 'text' | cut -d' ' -f1 | sed -e's/:$//g' | grep -v '[0-9]$' | xargs tail -f"
5
hoberion

要为所有grep命令(例如grep,egrep和zgrep)提供颜色,我的.bashrc文件中应包含以下内容

export GREP_OPTIONS='--color=auto'
4

“文件夹”别名很棒!我稍作修改,以使带有空格的目录不会导致错误。

alias folders='find . -maxdepth 1 -type d -print0 | xargs -0 du -sk | sort -rn'
4
phoenix8

我会回应@pjz关于手动了解事物而不是进行设置的评论。尤其是如果您访问许多机器,就像我经常做的那样。

所以我绝对知道的是set -o vi,因为我知道bash中的vi编辑命令,而我不知道emacs命令(此外,Ctrl + A会干扰screen)。在我自己的盒子上,我将其放在.bashrc

我还发现我必须包含export EDITOR=vim,因为最近发行的许多发行版默认都将其默认为nano,而当我期望使用vi时,该实用程序将需要您进行一些编辑,这是最令人讨厌的。 :-/

我还更改了提示。很久以前,我发现添加最后一个错误代码就足够有用,以至于我喜欢它。我喜欢提示中的完整路径名。还有当前的screen号。包括当前用户名和主机名是很有意义的。我的提示是PS1='\[email protected]\h $PWD $WINDOW [$?] \$ '

3
staticsan

这是地雷:

export HISTCONTROL=ignoredups
export HISTIGNORE="&:ls:bg:fg"

# set variable identifying the chroot you work in (used in the Prompt below)
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# shows you if you are in a chroot or in a git repository
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;30m\]\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]$(__git_ps1)\$ '


if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi

# two handy single-letter aliases

alias u='ls -hltr'
alias e='du * -cs | sort -nr | head'
alias g='grep -C5 --color=auto'

# creates a temp dir and cds into it
alias td='pushd $(mktemp -d)'

# find <dir> <file name regexp> <file contents regexp>
function fing { find "$1" -name "$2" -exec grep -H "$3" "{}" \; }

# shows "git diff" across any project in any subdirectory
alias git-differ='for g in $(find . -name ".git"); do g=${g%%.git};printf "$g\t\t\t";pu $g >/dev/null && git diff |wc -l; p >/dev/null; done'

# does git house keeping across any project in any subdirectory
alias git-housekeep='for g in $(find . -name ".git"); do g=${g%%.git};echo $g;pu $g && git repack && git gc --auto && p;done'

# Debian update
alias apg='aptitude update && aptitude dist-upgrade && aptitude clean'

# Quick way to serve files in HTTP from the local dir
alias webs='python -m SimpleHTTPServer'
3
Federico

Shell-fu.org 的.bashrc 集合

3
raspi

进行bash检查以查看窗口大小是否已更改(如果调整终端窗口的大小,可以防止行编辑变得怪异)

shopt -s checkwinsize

这是我最喜欢的。使bash到历史记录追加,而不是覆盖它。通常,当您启动bash时,它将历史记录加载到内存中,而当您关闭它时,它会将历史记录写出。这意味着,如果您加载两个外壳,请同时使用两个外壳,然后关闭两个外壳,最后关闭的外壳将覆盖所有更改。

此代码段首先导致它仅附加更改(而不是使用整个缓冲区覆盖),然后使它在每个命令之后写出更改。实际上,您可以实时更新.bash_history,因此,如果您启动一个新的终端,您将拥有其他正在运行的会话的历史记录中的所有命令。

shopt -s histappend
Prompt_COMMAND='history -a'
3
Dan Udey

以下是一些我的最爱:

alias ls='ls -F --color=auto'
alias l='ls'
alias ll='ls -ahl'
alias ..='cd ..'
alias ...='cd ../..'
alias mv='mv -i'

mkcd() {
        if [ $# != 1 ]; then
                echo "Usage: mkcd <dir>"
        else
                mkdir -p $1 && cd $1
        fi
}

# Git related
alias gs='git status'
alias gc='git commit'
alias ga='git add'
alias Gd='git diff'
alias gb='git branch'
alias gl='git log'
alias gsb='git show-branch'
alias gco='git checkout'
alias gg='git grep'
alias gk='gitk --all'
alias gr='git rebase'
alias gri='git rebase --interactive'
alias gcp='git cherry-pick'
alias grm='git rm'
2
Tom

来自Kirk Ba​​uer的 自动化Linux和Unix管理 (很棒的书!)

PS1='\n[\[email protected]\h]: \w\n$?> '

开头的换行符是我的,我希望在先前的输出和提示之间保持清晰的界线。其余的是:

\ u =用户名

\ h =主机

\ w =工作目录

$? =最后的返回码

2
Cawflands

我每天大约使用20次,以cd进入上次更改的目录:

cl()
{
        last_dir="$(ls -Frt | grep '/$' | tail -n1)"
        if [ -d "$last_dir" ]; then
                cd "$last_dir"
        fi
}

这两个保留了常用目录的永久书签:

rd(){
    pwd > "$HOME/.lastdir_$1"
}

crd(){
        lastdir="$(cat "$HOME/.lastdir_$1")">/dev/null 2>&1
        if [ -d "$lastdir" ]; then
                cd "$lastdir"
        else
                echo "no existing directory stored in buffer $1">&2
        fi
}
2
gz34

这些是我的最爱:

export HISTFILESIZE=1000000000
export HISTSIZE=1000000

我喜欢拥有一个永远不会忘记的命令行历史记录。

不幸的是,不久前,我从cron发射了一个Shell,该Shell无法以某种方式读取.bashrc,并将所有内容都切成500行,摧毁了超过一年的历史。因此,我建议将它们放在/ etc/bashrc中。

2
skiphoppy

这是我的最爱之一:

alias ssh='if [ "$(ssh-add -l)" = "The agent has no identities." ]; then ssh-add; fi; /usr/bin/ssh "[email protected]"'

如果我忘记了身份验证,它可以让我这样做,而不必浪费我的时间来进行ssh-add after ssh会话。

1
joshk0

几个不错的

使SSH自动完成ssh的主机名(如果它在您的配置或历史记录中)

complete -o default -o nospace -W "$(/usr/bin/env Ruby -ne 'puts $_.split(/[,\s]+/)[1..-1].reject{|Host| Host.match(/\*|\?/)} if $_.match(/^\s*Host\s+/);' < $HOME/.ssh/config)" scp sftp ssh

一些有用的bash完成设置

bind "set completion-ignore-case on" # note: bind used instead of sticking these in .inputrc
bind "set bell-style none" # no bell
bind "set show-all-if-ambiguous On" # show list automatically, without double tab

对于Mac OS X有用的一些

alias nospotlight='Sudo mdutil -a -i off'
alias cleardnscache='Sudo killall -HUP mDNSResponder'
alias ldd='otool -L'
alias seq='jot - '
alias eject='drutil eject'
1
lynxman
# vi ~/.bashrc # red/green terminal colors regarding exit code
export Prompt_COMMAND='PS1="`
if [[ \$? = "0" ]];
then echo "\\[\\033[0;32m\\]";
else echo "\\[\\033[0;31m\\]";
fi`[\[email protected]\h \w]\[\e[m\] "'
export PS1
1
LanceBaynes
IP_ADDRESS_BASH=`ip addr | grep -w inet | gawk '{if (NR==2) {$0=$2; gsub(/\//," "); print $1;}}'`
PS1="\h $IP_ADDRESS_BASH \w % "

然后显示刚登录的计算机的IP。

1
mrkafk

我将许多东西手动编译到$ HOME/local中,所以我有这个小片段:

for prog in $HOME/local/*
do
    if [ -d "$prog/bin" ]; then
        export PATH=$prog/bin:$PATH
    fi
    if [ -d "$prog/include" ]; then
        export C_INCLUDE_PATH=$prog/include:$C_INCLUDE_PATH
    fi
    if [ -d "$prog/lib" ]; then
        export LD_LIBRARY_PATH=$prog/lib:$LD_LIBRARY_PATH
        export LIBRARY_PATH=$prog/lib:$LIBRARY_PATH
    fi
    if [ -d "$prog/man" ]; then
        export MANPATH=$prog/man:$MANPATH
    fi
    if [ -d "$prog/share/man" ]; then
        export MANPATH=$prog/share/man:$MANPATH
    fi
done

我也有我的IRC我的服务器在屏幕上运行的客户端,所以我有这个(不是.bashrc的东西,但仍然有用)

#!/usr/bin/env bash

RUNNING=`screen -ls | grep irc`
if [ "" = "$RUNNING" ]; then
   screen -S irc irssi
else
   screen -dr irc
fi
1
Daniel Huckstep

我在很多机器上都使用了bashrc,所以我有这个小片段来确保LS是彩色的。这将在OSX计算机上修复它,如果您调整uname行,甚至可以在* BSD上修复它。

if [ "$TERM" != "dumb" ]; then
    if [ `uname` == "Darwin" ]; then
       alias ls='ls -G'
    else
       eval "`dircolors -b`"
       alias ls='ls --color=auto'
    fi
fi

另外,我还有一条命令来备份文件,这对您要更改配置文件并想快速制作副本非常有用。

bu () { cp $1 ~/.backup/`basename $1`-`date +%Y%m%d%H%M`.backup ; }
1
Andrew Williams
mkdircd () { mkdir -p "[email protected]" && eval cd "\"\$$#\""; }

ecb () { emacsclient -n -a emacs [email protected] & } # open in emacsclient in the background
ecp () { emacsclient -n $(which [email protected]) & } # open a given file found in a $PATH in emacsclient
ecr () { Sudo_EDITOR="emacsclient -a emacs" sudoedit [email protected]; } # start emacsclient or emacs and open the file as root

eCf () { emacs --batch --eval "(byte-compile-file \"[email protected]\")"; } # byte-compile file
eCa () { emacs --batch --eval "(batch-byte-compile-if-not-done)" *.el; } # byte-compile all el files in the current directory and it's children
1
Adobe

。 $ HOME/bin/git-Prompt/ git-Prompt.sh

0
brunoqc

我使用一些别名来使Edge脱离日常的CLI Grind ...

# I find myself doing this a lot
alias hg='history | grep '

# Likewise this, plus I'm always mistyping it...
alias findy='find . -name'

# sometimes you're just not sure you want to delete something...
alias trash='mv -t ~/.local/share/Trash/files --backup=t'

alias vb='vim ~/.bashrc'

# I find typing 'cd ..' less than optimal
alias up='cd ..'
alias 2up='cd ../../'
alias 3up='cd ../../../'
alias 4up='cd ../../../../'

# re-map caps lock key to be Ctrl
# (works on Linux, at least)
xmodmap -e "remove lock = Caps_Lock"
xmodmap -e "add control = Caps_Lock"

# helpful history settings:
export HISTCONTROL=ignoredups
export HISTCONTROL=ignoreboth
export HISTIGNORE=ls:ll:la:l:cd:pwd:exit:mc:su:df:clear:cls
0
yalestar

有时我必须在工作中使用Solaris系统。

但是,系统通过Puppet进行集中管理,包括密码文件(其中包括Shell设置)。

我的.bashrc因此读取如下内容:

%!/bin/bash
exec /bin/tcsh

:)

0
Alnitak

要在调整大小后在GNU屏幕中固定窗口大小,请执行以下操作:

shopt -s checkwinsize

要显示目录的权限,请使用快捷方式ls -ld

alias lld='ls -ld'

历史记录查看:

alias h='history | zgrep'

以及我的zgrep脚本的内容,我无法弄清楚如何直接填充到别名中:

#!/bin/sh
grep "${*-.}"
0
Annika Backstrom

我沉迷于屏幕,并且使用以下快捷方式将SSH连接到计算机。使用此脚本,我输入p hostname以SSH到主机并运行屏幕,或输入o hostname进行相同的操作但在本地计算机上运行屏幕。

首先是一个脚本,该脚本连接到与您正在运行的脚本同名的SSH服务器。我称它为simple_ssh

#!/bin/sh
BASENAME=$(basename $0)

if [ "$SCREEN" = "1" ]; then
    export SCREEN=0
    exec screen -RD scr$BASENAME -s $0
Elif [ "$SCREEN" = "2" ]; then
    exec ssh $BASENAME "[email protected]" -t 'screen -RD'
fi

exec ssh $BASENAME "[email protected]"

将其符号链接到您路径中的mars,而mars成为ssh mars的快捷方式:

[email protected]:bin$ ln -s simple_ssh mars
[email protected]:bin$ mars
[email protected]:~$

$SCREEN环境变量使您可以通过连接自动执行GNU屏幕。SCREEN=1)在本地运行屏幕(例如,如果主机上未安装屏幕)和SCREEN = 2在主机本身上运行它。

使用几个别名来简化此操作:

alias o='SCREEN=1 exec'
alias p='SCREEN=2 exec'

使用脚本为给定~/.ssh/config文件的所有主机创建符号链接,如下所示:

Host mars
    HostName mars.example.com
    User abackstrom

脚本sshconfig2simplessh

#!/bin/sh

BASENAME=$(basename "$0")
USAGE="Usage: $BASENAME /path/to/bin"

if [ -z "$1" ] ; then
    echo $USAGE
    exit 0
fi

if [ ! -d "$1" ] ; then
    echo "$1 is not a directory" >&2
    exit 1
fi

cd "$1"

HOSTS=$(grep '^Host ' < ~/.ssh/config | cut -d' ' -f2)

for Host in $HOSTS ; do
    if [ ! -e "$Host" ]; then
        echo ln -s simple_ssh "$Host"
        ln -s simple_ssh "$Host"
    fi
done
0
Annika Backstrom

软呢帽

alias install=Sudo yum install

德比安

alias install=Sudo apt-get update && Sudo apt-get install
0
egorgry