2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

この記事誰得? 私しか得しないニッチな技術で記事投稿!

特定回線に接続しているときのみ、ターミナル周りを一括更新するコマンドを実装してみた

Posted at

はじめに

 こんにちは。Hagianです。現在大学院の修士2年です。表題のとおり、「特定回線に接続しているときのみ、ターミナル周りを一括更新するコマンドを実装」してみたので 自己満足で 備忘録的に記事を書きます。

きっかけ

  • Pythonのライブラリ、Homebrewのformulaを頻繁に更新したいが、かなり通信量を必要とすることが多い

  • できれば通信量を気にせず使える回線で更新したい

  • 大学にいるとき のみ 更新すればいいのでは?

やりたいこと

  1. Homebrewのupgradeと、pipを使ったライブラリの更新を一括でする
  2. 大学の居室のWi-Fiに接続しているときのみ実行させる

環境

  • MacBook Pro(M1, 2020)
  • macOS Ventura 13.4
  • Z shell 5.9
  • Python 3.11.4

実装

参考にしたもの

ディレクトリ構造

~/
├ PersonalShell/
    ├ main.sh # コマンドを記述したシェルスクリプト
    └ pip3_all.py # pipを使ってライブラリを一括更新するPythonスクリプト

Pythonライブラリ一括更新

 本当はワンライナーをシェルスクリプトにそのまま記述したかったのですが、パイプを使ったりしている関係か、うまくいかなかったので、別ファイルに記述してシェルから呼び出すようにしました。Pythonのsubprocessを用いて、コード内でシェルのコマンドを動作させています。

pip3_all.py
import subprocess

cmd = subprocess.run("pip3 list -o | tail -n +3 | awk '{print $1}' | xargs pip3 install -U",
                    capture_output=True,
                    text=True,
                    shell=True # ここがコマンドインジェクション
)
print(cmd.stdout)
print(cmd.stderr)

 このスクリプト、1点だけ注意するポイントがあります。

このファイルではコマンド(シェル)インジェクションを使用しています。再現した際に発生する可能性のあるセキュリティ上の問題の責任は負いません。自己責任でお願いします。

Homebrewの更新

 これはHomebrewユーザーにとっては基本的なコマンドですね。brew upgradeするだけで更新可能です。

シェルスクリプトにまとめる

 これらをまとめて、回線判別の後に動作させてみた例です。

main.sh
#!/bin/zsh

# 接続している回線名(SSID)を取得
wireless=$(networksetup -getairportnetwork en0)
echo ${wireless}

# if文で判別、SSIDは一例です
if [ "$wireless" = "Current Wi-Fi Network: Buffalo-A-****" ] || [ "$wireless" = "Current Wi-Fi Network: Buffalo-G-****" ]

# とあるルーターの5GHz/2.4GHzのどちらかであれば更新実行
then
	brew upgrade
	python3 ~/PersonalShell/pip3_all.py
else

# それ以外のSSID
	echo "Not upgradeable"
fi


おまじない

 最後に、権限 おまじない を付与して、シェルから呼び出せるようにします(Permission denied回避)。

$ sudo chmod 755 ~/PersonalShell/main.sh

 エイリアスにしておくと、すぐ呼び出せて便利です。.zshrcなどの設定ファイルに追記しておきましょう。

alias "terminal-update=/Users/hogehoge/PersonalShell/main.sh"

おわり

 もっとスマートな方法もありそうですが、現状動くのでいいかなと。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?