環境構築に役立ちそうなシェルスクリプト【自分のPCで設定しているソフトウェア,設定の紹介 #7】
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
まとめ
今回は少し短いですが,環境構築に役立ちそうなシェルスクリプトの紹介をしました。
それ以外にも細かいシェルスクリプトは書きためているので,もし興味がある方は以下を参照してくださいね。