2015-04-27

swift on terminal?

このところ、「OS X 10.10.2」で「Terminal」の運用を黒っぽい色に変更してみた。結構使い良くなったのでホッとした。ふと、「swift」を「Terminal」から呼び出せないかと思ったたので、打ってみた;



取り敢えず「書き出し」とか「算数」なら対応しそうだ。言うならば、小学生低学年のレベルだな。今後の発展が期待できる。むしろ「Playgrond」を飛び出して、「Swift as a shell script on Terminal」なんて運用ができるといいのだが。

追伸:

「Xcode -> terminal」と来ると、エディターの色も黒色系にしたくなってきた。


____
この記事の履歴
  1. 開始 2015-04-27(月) 08:30:06

2015-04-17

zshで「空白行を除去」をする方法

• 状況

テキストから「空白行の除去」が必要になったので、bashの時から使ってきた「sed ’s/^$//g’」を適用したが、上手くいかない;
  • エラーは出ないが、
  • 入力ファイルがそのままでてきてしまう。

私は「grep」コマンドに親しんでいるので、「grep」で工夫をしてみた;


• ターミナルでのトライ状況






















• 結論

「空白行の除去」には「grep -v ‘^$’」を使うことにしよう。


• 感想

そろそろ、zsh特有の「=~」に挑戦するかなぁ。


•展開

どうせ使うなら、Zshらしい使い方が無いかと思って検索した。その結果、コメントに記入した2つの参考資料に従って、ダイレクトな正規表現を使えた。

#!/bin/zsh

# d0l: Delete blank(0) Line from file.
#
# References:
#    1) "From Bash to Z Shell", Oliver Kiddle et.al., Chapter 13, p331-2.
#    2) "試験運用中なLinux備忘録: ファイルの内容を1行ずつ処理"
#        http://d.hatena.ne.jp/kakurasan/20100112/p1
#
# Usage: d0l «file name»
#
# 2015-04-18(土) 14:21:07 by mNeji
#

file="$1"

cat "$file" | \
while read line; do
    [[ "$line" =~ '^$' ]] && : || echo "$line"
done
簡単な処理なら、「grep」「sed」「awk」の様な難しい文法を利用しないでも、何とかなりそうだ。

____
このページの履歴
  1. 開始 2015-04-17(金) 22:46:21  
  2. 追加 2015-04-18(土) 16:58:16 展開

2015-04-16

Yosemiteで「Wi-Fiのオン・オフ状態」をトグルするスクリプト

このスクリプトの基本動作は「Wi-Fiのオン・オフ状態」をトグルすることです。特にターミナルでWi-Fiを操作するスクリプトを開発しているしている時に、メニューバー中のWi-Fiのアイコンまでマウスを持っていくのは億劫です。

さらに、同時に使うことがあるコマンド、「aiport -I, airporl -s」も簡単に呼び出せるようにしました。Mavericksでこのスクリプトを制作して重宝していました。

残念なことにYosemiteで動作不良が起こったので、それを修正しました。Yosemiteではネットワーク環境が大幅に変更される模様ですので、このスクリプトを紹介します。

ターミナルでの実施例



スクリプトのソース

#!/bin/zsh 

# we: "Wifi state Exchanger" script for Yosemite

# Usage:
#  • we⏎  : normal opration: exchange state(on/off) of Wi-Fi.
#  • we n⏎: normal operation with no output.
#  • we i⏎: airport -I 
#  • we s⏎: airport -s 

# 2015-04-15 11:12:27 from won/wof, by mNeji.

# variables
local Pctrol a api apa inp etp
local pre_status chg_status 
local my_initial my_now nsec cen1


# input parameter
Pctrol="$1"

# direct definition to the command 'airport' for general purose
a="/System/Library/PrivateFrameworks/Apple80211.framework/Versions/"
a=${a}Current/Resources/airport

# airport call & finish
if [[ "$Pctrol" = "i" ]]; then
 $a -I; return
elif [[ "$Pctrol" = "s" ]]; then
 $a -s; return
fi

# set status for previous and changed
pre_status=$([[ "$(ipconfig getifaddr en1 )" = "" ]] && echo "off" || echo "on")
 #echo $pre_status
[[ "$pre_status" = "off" ]] && chg_status="on" || chg_status="off" 
 #echo $pre_status
 #echo $chg_status

# Change Airport status
networksetup -setairportpower en1 $chg_status 

# set initial date in unit of 'sec' 
my_initial=$(date +%s)

# main waiting loop until 'netstat' contain en1 conpornents.
while : ; do
 my_now=$(date +%s) 
 nsec=$(($my_now-$my_initial))

 if [[ "$Pctrol" = ""  ]]; then
  printf "\rWi-Fi:$pre_status → passed(sec): %d" $nsec
 fi 
 cen1=$(netstat -r -f inet | grep en1)
 # s=$(ipconfig getifaddr en1) # it was worked at Mavericks.
 
 [[ "$cen1" = "" ]] && continue || break
done

if [[ "$Pctrol" = ""  ]]; then
 echo -n "\rWi-Fi[$pre_status→(${nsec}sec)→$chg_status] "
fi

# list up status for wifi
api=$($a -I |grep "^  *SSID: " |sed 's/^  *//g' |cut -d' ' -f2)
apa=$($a -I |grep "^  *BSSID: " |sed 's/^  *//g' |cut -d' ' -f2)
inp=$(ifconfig en1 | grep 'inet ' | cut -d' ' -f2)
etp=$(ifconfig en1 | grep ether | cut -d' ' -f2)

if [[ "$Pctrol" = ""  ]]; then
 if [[ "$chg_status" = "on" ]]; then
  echo "$api($apa)⥢⥤ $inp($etp)"
 else
  echo "AccessPoint is idle."
 fi
fi

____
このページの履歴
  1. 開始 2015-04-16(木) 20:04:55 
  2. 修正 2015-04-17(金) 00:32:09 図の修正

2015-04-12

動作中のMacの基礎的ホスト情報を表示するスクリプト

現在、「OS X Yosemite 10.10.2」のクリーン・インストールの準備で四苦八苦しています。特に、これまで「Lion --> Mavericks」までは上書きインストールしか経験がないので。
 
「Mavericks 10.9.5」と「Yosemite 10.10.2」とを交互に立ち上げて比較しています。何度かしていると、自分がどの環境にいるか、混乱します。

ふと、以前ネットワークの整備した時に、LANの設定を表示するスクリプトを書いていたのを思い出しました。それにホスト情報を加えた「zshスクリプト」を作りました。これが結構役にたつので、紹介します。

 ターミナルでの使用例をお示しします;




 スクリプトをお示しします;

#!/bin/zsh
#
# myHost: 
#
# Usage & outputs: 
#  % myHost⏎
#   •System Version: Mac OS X: 10.10.2(14C1514)
#   •Host Name: MmM11.local
#   •Boot Volume: sh3X10.2
#   •LAN Ports: (1) Ether:"*" 10.9.8.100  
#               (2) Wi-Fi:"*" 10.9.8.101  

getHostInfo() {
 sysName=$(sw_vers -productName)
 sysVersion=$(sw_vers -productVersion)
 sysBuild=$(sw_vers -buildVersion)
 
 hostName=$(hostname)
 etherIP=$(ipconfig getifaddr en0)
 wifiIP=$(ipconfig getifaddr en1)
 myd=$( ls -l /Volumes/ | grep " -> " |\
   sed -e "s%.* \([a-zA-Z0-9._-]*\) -> /$%\1%")
 echo " •System Version: $sysName $sysVersion($sysBuild)"
 echo "      •Host Name: $hostName"
 echo "    •Boot Volume: $myd"
 echo "      •LAN Ports: (1) $LAN_Name[1]:\"$LAN_State[1]\" $LAN_IP[1]"
 echo "                  (2) $LAN_Name[2]:\"$LAN_State[2]\" $LAN_IP[2]"
 return
}

getLANportsOrder(){
 set -a LAN_Name=()
 set -a LAN_IP=()
 set -a LAN_State=()
 
 local portOrder, wifiIP, wifiState, etherIP, etherState
 
 # 「(数字 )の行を切り出す。
 portOrder=$(networksetup -listnetworkserviceorder | grep "(\d) ")
  #echo "$portOrder"

 # Wi-Fi setting 
 Nwifi=$(( $(echo $portOrder | grep "Wi-Fi$" | cut -c2) ))
 LAN_Name=( Wi-Fi )
 wifiIP=$(ipconfig getifaddr en1)
 if [[ $wifiIP = "" ]]; then 
  wifiIP="not active: turned off"
  wifiState="_"
 else
  wifiState="*"
 fi 
 LAN_IP=( $wifiIP )
 LAN_State=( $wifiState ) 
  #echo "Nwifi=$Nwifi"

 # Ethernet setting
 Nether=$(( $(echo $portOrder | grep "Ethernet$" | cut -c2) ))
 etherIP=$(ipconfig getifaddr en0)
 if [[ $etherIP = "" ]]; then 
  etherIP="not active: turned off"
  etherState="_"
 else
  etherState="*"
 fi   
  

 if [[ $Nwifi -gt $Nether ]] ; then
  LAN_Name=( Ether $LAN_Name )
  LAN_IP=( $etherIP $LAN_IP )
  LAN_State=( $etherState $LAN_State )
 else
  LAN_Name=( $LAN_Name Ether )
  LAN_IP=( $LAN_IP $etherIP )
  LAN_State=( $LAN_State $etherState )
 fi
 
 #echo $LAN_Name
 #echo $LAN_IP  
 #echo $LAN_State  
 #
 #echo "    (1) $LAN_Name[1]:\"$LAN_State[1]\" $LAN_IP[1]  "
 #echo "    (2) $LAN_Name[2]:\"$LAN_State[2]\" $LAN_IP[2]  "
 
}

# 実行
getLANportsOrder
getHostInfo





 ____ このページの履歴
  1.  開始 2015-04-12(日) 22:47:56 
  2.  修正 2015-04-13(月) 13:42:55 スクリプト: 不要部分を削除。


注目の投稿

Terminalでの、なんちゃってViモドキ

近頃、ようやくKarabiner-Elementsに慣れてきたので、 Terminalで動作する「擬似Vi-Mode」を作って見たので、ご紹介します。 『概要』 「擬似Vi-Mode」の所以は、方向キー「←↓↑→」を通常の「hjkl」ではなくて「jkil」としました。これ...