読者です 読者をやめる 読者になる 読者になる

$ service ssh0 start

from everything import *

環境構築に役立ちそうなシェルスクリプト【自分のPCで設定しているソフトウェア,設定の紹介 #7】

自分のPCで設定しているソフトウェア,設定の紹介

https://github.com/ssh0/dotfiles/tree/master/bin

今回は,自分でつくったシェルスクリプトの中で特に環境構築に役立ちそうなものを紹介したいと思います。

リスト

myrsync

rsyncコマンドはとっても便利なのですが,コマンドの打ち間違いがあると怖いので,myrsyncというコマンドをつくっておいて,myrsync upでバックアップ,myrsync downでリストアができるようにしています。

#!/bin/bash
# written by Shotaro Fujimoto (https://github.com/ssh0)
#=#=#=
# I use dropbox for daily work. And I often use rsync program to synchronize the directories.
#
# You may change the variables.
#
# ```
# dropboxpath="$HOME/Dropbox/Workspace/"
# localpath="$HOME/Workspace/"
# ```
#
# Usage:
#
# `myrsync up` = `rsync -av --delete $localpath $dropboxpath`
#
# `myrsync down` = `rsync -av --delete $dropboxpath $localpath`
#
#=#=

dropboxpath="$HOME/Dropbox/Workspace/"
localpath="$HOME/Workspace/"
rsynccmd='rsync -azv --progress --delete'

columns=$(tput cols)
line=$(printf '%*s\n' "$columns" '' | tr ' ' -)

sync() {
  echo ""
  if $confirm; then
    echo "$ $rsynccmd -n $1 $2"
    echo "$line"
    $rsynccmd -n $1 $2
    echo "$line"
    read -p "Continue? [y/N]" confirm
    if [ "$confirm" != "y" ]; then
      echo "Aborted."
      exit 1
    fi
    echo ""
  fi
  echo "$ $rsynccmd $1 $2"
  echo "$line"
  $rsynccmd $1 $2
}

confirm=true

while getopts yh OPT
do
  case $OPT in
    "y") confirm=false
      ;;
    "h") usage_all "$0"; exit 0
      ;;
    *)
      echo "myrsync: Unknown option."
      exit 1
      ;;
  esac
done

shift $((OPTIND-1))

if [ "$1" = 'up' ]; then
  sync $localpath $dropboxpath 
elif [ "$1" = 'down' ]; then
  sync $dropboxpath $localpath
else
  echo "Command not found. You should select openration from 'up/down'."
  exit 1
fi

proxy_toggle.sh

今は違うのですが,自分のPCを研究室のネットワークで使うことも多く,プロキシの設定を切り替える必要がありました。

proxy_toggle.sh onとすると,環境変数に加え,shellrcを書き換え,/etc/apt/apt.confを書き換えることで,ワンコマンドでプロキシ下でネットワークを使用できます。

proxy_toggle.sh offとすれば,プロキシ設定をオフにできます。

スクリプトの書き方がよくないので,また時間のあるときに書きなおしたいですね。

#!/bin/bash
#=#=#=
# If you are in proxy network, you should manage your proxy setting.
#
# This script enables you to toggle proxy setting by one command.
#=#=
HTTP_PROXY_HOST="http://www-proxy.waseda.jp:8080"
HTTPS_PROXY_HOST="https://www-proxy.waseda.jp:8080"
FTP_PROXY_HOST="ftp://proxy.waseda.jp:21"

shellrc=$HOME/.zshrc  # .bashrc
# shellrc=${ZSH}/rc.mine

if [ $# = 0 ]; then
  echo "Error: no args"
  exit 1
else
  if [ $1 = "on" ]; then
    sudo sed -i.bak '/http[s]::proxy/Id' /etc/apt/apt.conf
    sudo sed -i.bak '/ftp::proxy/Id' /etc/apt/apt.conf
    sudo tee -a /etc/apt/apt.conf <<EOF
Acquire::http::proxy "$HTTP_PROXY_HOST/";
Acquire::https::proxy "$HTTPS_PROXY_HOST/";
Acquire::ftp::proxy "$FTP_PROXY_HOST/";
EOF

    sudo sed -i.bak "/http_proxy/Id" /etc/environment
    sudo sed -i.bak "/HTTP_PROXY/Id" /etc/environment
    sudo sed -i.bak "/https_proxy/Id" /etc/environment
    sudo sed -i.bak "/HTTPS_PROXY/Id" /etc/environment
    sudo sed -i.bak "/ftp_proxy/Id" /etc/environment
    sudo sed -i.bak "/FTP_PROXY/Id" /etc/environment
    sudo tee -a /etc/environment <<EOF
http_proxy=$HTTP_PROXY_HOST
HTTP_PROXY=$HTTP_PROXY_HOST
https_proxy=$HTTPS_PROXY_HOST
HTTPS_PROXY=$HTTPS_PROXY_HOST
ftp_proxy=$FTP_PROXY_HOST
FTP_PROXY=$FTP_PROXY_HOST
EOF
    sed -i.bak '/http_proxy/Id' $shellrc
    sed -i.bak '/HTTP_PROXY/Id' $shellrc
    sed -i.bak '/https_proxy/Id' $shellrc
    sed -i.bak '/HTTPS_PROXY/Id' $shellrc
    sed -i.bak '/ftp_proxy/Id' $shellrc
    sed -i.bak '/FTP_PROXY/Id' $shellrc
    tee -a $shellrc <<EOF
export http_proxy=$HTTP_PROXY_HOST
export HTTP_PROXY=$HTTP_PROXY_HOST
export https_proxy=$HTTPS_PROXY_HOST
export HTTPS_PROXY=$HTTPS_PROXY_HOST
export ftp_proxy=$FTP_PROXY_HOST
export FTP_PROXY=$FTP_PROXY_HOST
EOF
  else
    if [ $1 = "off" ]; then
      sudo sed -i.bak "/http::proxy/Id" /etc/apt/apt.conf
      sudo sed -i.bak "/https::proxy/Id" /etc/apt/apt.conf
      sudo sed -i.bak "/ftp::proxy/Id" /etc/apt/apt.conf
      sudo sed -i.bak "/http_proxy/Id" /etc/environment
      sudo sed -i.bak "/HTTP_PROXY/Id" /etc/environment
      sudo sed -i.bak "/https_proxy/Id" /etc/environment
      sudo sed -i.bak "/HTTPS_PROXY/Id" /etc/environment
      sudo sed -i.bak "/ftp_proxy/Id" /etc/environment
      sudo sed -i.bak "/FTP_PROXY/Id" /etc/environment
      sed -i.bak '/http_proxy/Id' $shellrc
      sed -i.bak '/HTTP_PROXY/Id' $shellrc
      sed -i.bak '/https_proxy/Id' $shellrc
      sed -i.bak '/HTTPS_PROXY/Id' $shellrc
      sed -i.bak '/ftp_proxy/Id' $shellrc
      sed -i.bak '/FTP_PROXY/Id' $shellrc
      tee -a $shellrc <<EOF
export http_proxy=
export HTTP_PROXY=
export https_proxy=
export HTTPS_PROXY=
export ftp_proxy=
export FTP_PROXY=
EOF
    else
      echo "arg: 'on' or 'off'"
      exit 1
    fi
  fi
fi
exit 0

start_urxvtd.sh

urxvtのデーモンを立ち上げ,urxvtcコマンドで端末を立ち上げることができるようになります。

#!/bin/bash
# written by Shotaro Fujimoto (https://github.com/ssh0)
#=#=#=
# If there is no process of urxvtd (urxvt daemon), start urxvtd.
#=#=

condition="$(ps -aux | grep urxvtd | grep -v grep | grep -v $0)" 
if [ "$condition" = "" ]; then
  urxvtd -q -f -o
  echo "urxvt damon is started."
else
  echo "urxvt damon has been already started."
fi

exit 0

touchpad_toggle.sh

タッチパッドの機能をトグルします。

パームレストの機能もあるのですが,完全に機能を切ってキーボードだけで操作を行えるというのは気分的に楽なものです。

キーボード・ショートカットに設定(Ctrl + Esc)しておくことで,便利に切り替えることができます。

#!/bin/bash
#=#=#=
# toggle enabling the touchpad.
#
# I often use this srcipt in my laptop. (also shortcut to it)
#
# >[How to disable the touchpad? - Ask Ubuntu](http://askubuntu.com/questions/65951/how-to-disable-the-touchpad)
#=#=

declare -i ID
ID=`xinput list | grep -Eo 'TouchPad\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
declare -i STATE
STATE=`xinput list-props $ID | grep 'Device Enabled' | awk '{print $4}'`
if [ $STATE -eq 1 ]; then
    xinput disable $ID
    notify-send "Touchpad disabled." \
        -t 1000 \
        -i /usr/share/icons/gnome/scalable/status/touchpad-disabled-symbolic.svg
else
    xinput enable $ID
    notify-send "Touchpad enabled." \
        -t 1000 \
        -i /usr/share/icons/gnome/scalable/devices/input-touchpad-symbolic.svg
fi

まとめ

今回は少し短いですが,環境構築に役立ちそうなシェルスクリプトの紹介をしました。

それ以外にも細かいシェルスクリプトは書きためているので,もし興味がある方は以下を参照してくださいね。

https://github.com/ssh0/dotfiles/tree/master/bin