<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>shell | hgrs&#039;s Blog</title>
	<atom:link href="/archives/tag/shell/feed" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description>文字好きエンジニアの技術メモ</description>
	<lastBuildDate>Fri, 07 Aug 2020 05:57:12 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.3.1</generator>

<image>
	<url>/wp-content/uploads/2019/05/cropped-port_512-32x32.png</url>
	<title>shell | hgrs&#039;s Blog</title>
	<link>/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>実行中のコマンドの標準出力を変数にして別コマンドを実行する</title>
		<link>/archives/407.html</link>
					<comments>/archives/407.html#respond</comments>
		
		<dc:creator><![CDATA[hgrs]]></dc:creator>
		<pubDate>Tue, 25 Feb 2020 01:15:44 +0000</pubDate>
				<category><![CDATA[技術メモ]]></category>
		<category><![CDATA[shell]]></category>
		<guid isPermaLink="false">/?p=407</guid>

					<description><![CDATA[はじめに 実行中の標準出力を受け取って、何か別のコマンドを実行したいことがあったので、それを実現する...]]></description>
										<content:encoded><![CDATA[<h2>はじめに</h2>
<p>実行中の標準出力を受け取って、何か別のコマンドを実行したいことがあったので、それを実現する方法を紹介します。</p>
<h2>標準出力を受け取る</h2>
<p>単純に出力される内容を別コマンドに渡すにはパイプラインを使用すれば簡単にできます。</p>
<p>ただ、少し複雑なことをやろうとすると少し自由度が低いので、<code>while</code> と <code>read</code> を使ってコマンドを自由に使えるようにしましょう。</p>
<p>以下では出力内容を <code>line</code> という変数として受け取るスクリプトです。</p>
<pre><code class="language-bash">&lt;実行したいコマンド&gt; | while read -r line
do
  &lt;出力を受け取って処理するコマンド&gt;
done;</code></pre>
<p>例えば全く意味のないことですが <code>ping</code> の実行をそのまま表示するコマンドは以下のようになります。</p>
<pre><code class="language-bash">ping 127.0.0.1 | while read -r line
do
  echo $line
done;</code></pre>
<p>これを使えば、例えば if文で何か分岐させたりなど色々と応用が効きます。</p>
<p>ちなみに、これを利用しているのが、以前に紹介している <a href="/20200223233018">マイクラのログイン通知</a> です。</p>
<h2>おわりに</h2>
<p>シェルスクリプトは特別得意なわけではないので、もっと良い方法があるかもしれません。あれば教えてください。</p>
]]></content:encoded>
					
					<wfw:commentRss>/archives/407.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Minecraft のマルチサーバでログイン通知を Slack / Discord / LINE に送る</title>
		<link>/archives/401.html</link>
					<comments>/archives/401.html#comments</comments>
		
		<dc:creator><![CDATA[hgrs]]></dc:creator>
		<pubDate>Sun, 23 Feb 2020 14:30:18 +0000</pubDate>
				<category><![CDATA[技術メモ]]></category>
		<category><![CDATA[Minecraft]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[shell]]></category>
		<guid isPermaLink="false">/?p=401</guid>

					<description><![CDATA[はじめに 研究室の人たちとマイクラのマルチで遊んでるんですが、誰がインしているかを知りたいため、ログ...]]></description>
										<content:encoded><![CDATA[<h2>はじめに</h2>
<p>研究室の人たちとマイクラのマルチで遊んでるんですが、誰がインしているかを知りたいため、ログイン通知をつけています。せっかくなのでその方法を公開します。</p>
<h2>前提条件</h2>
<p>通知を送信する際に Python 製のライブラリを使用するので Python が使用できることが前提です。</p>
<p>僕の環境の場合は <code>3.8.0</code> で動作しています。</p>
<p>必要ライブラリのインストールは以下のコマンドでできます。</p>
<pre><code class="language-bash">pip install pynotificator</code></pre>
<p>インストールした PyNotificator は Slack、Discord、LINE にメッセージを送信することができるので、受け取り先を決めて必要なURL、トークンを以下から取得します。</p>
<p>-Slack: <a href="https://api.slack.com/apps">Slack API</a><br />
-Discord: サーバー設定 &gt; ウェブフック より、Webhook 用の URL を取得<br />
-LINE: <a href="https://notify-bot.line.me/">LINE Notify</a></p>
<h2>通知用のスクリプト</h2>
<p>マイクラのサーバ実行スクリプトからパイプで通知用コマンドにログを流します。</p>
<p>実行コマンドの大枠は以下のとおりです。</p>
<pre><code class="language-bash">&lt;マイクラのサーバ実行コマンド&gt; | while read -r line
do
  if [[ $line == *joined\ the\ game* ]]; then echo &quot;${line:33}&quot; | &lt;slack|discord|line&gt;-notify -m &quot;$(cut -d &#039; &#039; -f 1) がログインしました。&quot; &lt;URL|token&gt; ; fi
  if [[ $line == *left\ the\ game* ]]; then echo &quot;${line:33}&quot; | &lt;slack|discord|line&gt;-notify -m &quot;$(cut -d &#039; &#039; -f 1) がログアウトしました。&quot; &lt;URL|token&gt; ; fi
done;</code></pre>
<p>これをもとに Slack か Discord か LINE を選択して、上記の <code>&lt;&gt;</code> で囲まれた部分を書き換えてください。<br />
例えば以下のようなコマンドになります。</p>
<pre><code class="language-bash">java -jar server.jar nogui | while read -r line
do
  if [[ $line == *joined\ the\ game* ]]; then echo &quot;${line:33}&quot; | slack-notify -m &quot;$(cut -d &#039; &#039; -f 1) がログインしました。&quot; https://hooks.slack.com/services/xxx ; fi
  if [[ $line == *left\ the\ game* ]]; then echo &quot;${line:33}&quot; | slack-notify -m &quot;$(cut -d &#039; &#039; -f 1) がログアウトしました。&quot; https://hooks.slack.com/services/yyy ; fi
done;</code></pre>
<h2>動作例</h2>
<p>僕の環境では Discordに送っているので、このようになります。</p>
<p><img decoding="async" src="/wp-content/uploads/2020/02/89910b38358d76a8d22755b7f8edc910.png" alt="" /></p>
<p>ちなみに、このスクリプトを少し応用すると、死亡通知などもつけることができるようになります。</p>
<p><img decoding="async" src="/wp-content/uploads/2020/02/d14862fc9f102ea9a3c63a3ee3156edf.png" alt="" /></p>
<h2>おわりに</h2>
<p>情報系の研究室っぽく、マイクラをやる環境もどんどん便利にしていきたいですね。</p>
]]></content:encoded>
					
					<wfw:commentRss>/archives/401.html/feed</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>macOSでZ shell（zsh）とPreztoを使えるようにする</title>
		<link>/archives/165.html</link>
					<comments>/archives/165.html#respond</comments>
		
		<dc:creator><![CDATA[hgrs]]></dc:creator>
		<pubDate>Sat, 18 May 2019 01:02:01 +0000</pubDate>
				<category><![CDATA[技術メモ]]></category>
		<category><![CDATA[shell]]></category>
		<guid isPermaLink="false">/?p=165</guid>

					<description><![CDATA[はじめに セットアップ系の話です。 前にも書いたかもしれませんが僕はGUIが好きでCUIはあまり好き...]]></description>
										<content:encoded><![CDATA[<h2>はじめに</h2>
<p>セットアップ系の話です。</p>
<p>前にも書いたかもしれませんが僕はGUIが好きでCUIはあまり好きではないのですが、現状使わざるを得ない状況が多いです。</p>
<p>どうせ使うなら使いやすくしたいということで、僕の使ってる環境構築を晒したいと思います。</p>
<h2>前準備</h2>
<p>最新のzshを入れるために<a href="https://brew.sh/index_ja">Homebrew</a>を導入します。すでに入ってる人はスキップしてください。</p>
<p>以下、インストールコマンド</p>
<pre><code class="language-bash">$ /usr/bin/ruby -e &quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)&quot;</code></pre>
<h2>zshのセットアップ</h2>
<h3>zshのインストール</h3>
<p>まず、インストールします。</p>
<pre><code class="language-bash">$ brew install zsh</code></pre>
<h3>zshを使えるようにする</h3>
<p>次に、インストールしたzshをシェルのリストに追加します。</p>
<p>こちらは<code>/etc/shells</code>に<code>/usr/local/bin/zsh</code>を書き加えます。好きなエディタで書き込んでも良いですし、以下のコマンドでも書き加えられます。</p>
<pre><code class="language-bash">$ echo /usr/local/bin/zsh | sudo tee -a /etc/shells</code></pre>
<h3>ログインシェルをzshに変更</h3>
<p>最後にログインシェルをzshに変更しましょう。</p>
<pre><code class="language-bash">$ chsh -s /usr/local/bin/zsh</code></pre>
<p>以上でzshのインストールは終わりです。ターミナルを再起動するか<code>zsh</code>とすれば、zshが使えます。</p>
<h2>Preztoのセットアップ</h2>
<h3>Preztoとは</h3>
<p>インストールした直後の何も設定していないzshでは心許ないので強くするために<a href="https://github.com/sorin-ionescu/prezto">Prezto</a>をインストールします。</p>
<p>Preztoを入れることで、<code>.zshrc</code>に色々書かなくても、補完の強化やプロンプトのテーマ設定等の面倒なことを良しなにしてくれます。</p>
<h3>Preztoのインストール</h3>
<p>まず、<code>git</code>でファイル群を持ってきます。</p>
<pre><code class="language-bash">$ git clone --recursive https://github.com/sorin-ionescu/prezto.git &quot;${ZDOTDIR:-$HOME}/.zprezto&quot;</code></pre>
<p>次に設定ファイルの作成を行います。</p>
<p>↓は1つのコマンドなので、4行丸ごとコピペで実行します。</p>
<pre><code class="language-bash">$ setopt EXTENDED_GLOB
for rcfile in &quot;${ZDOTDIR:-$HOME}&quot;/.zprezto/runcoms/^README.md(.N); do
  ln -s &quot;$rcfile&quot; &quot;${ZDOTDIR:-$HOME}/.${rcfile:t}&quot;
done</code></pre>
<p>以上でインストールが完了です。</p>
<p>インストールが終了するとzshのプロンプトに3色の矢印が表示されると思います。</p>
<h3>Preztoのプロンプトテーマ変更</h3>
<p>個人的にあまり初期のプロンプトのテーマが好きではなかったので、<code>~/.zpreztorc</code>を変更していきます。</p>
<p>環境やバージョンによって多少行数は前後するかもしれませんが110行あたりからプロンプトの設定が書いてあります。そこのテーマの設定（僕の環境では116行目）を以下のように書き換えます（powerlineは僕が選んだテーマなので、この部分を自分の好みのテーマに書き換えます。テーマ一覧は<code>prompt -p</code>で確認することができます）。</p>
<pre><code class="language-git">- zstyle &#039;:prezto:module:prompt&#039; theme &#039;sorin&#039;
+ zstyle &#039;:prezto:module:prompt&#039; theme &#039;powerline&#039;</code></pre>
<p>ここで注意したいのは、powerlineでは特殊なフォントを使用するため、ターミナルで使用するフォントを変更しなければならないことです。好きなフォントのpowerline版を探してインスールしておきましょう！</p>
<h2>おわりに</h2>
<p>Preztoを入れれば、基本的な使いやすさが向上しますが、細かな設定は自分で<code>.zshrc</code>に書いていき、自分用に育てていきましょう！</p>
<p>あまり書き込んではいませんが、僕の<code>.zshrc</code>は<a href="https://github.com/higurashi-takuto/mac-setup/blob/master/resources/.zshrc">ここ</a>で晒してます。</p>
<p><del>こんだけ書いておいて実はXonshが気になって、新しく入れてみたのは秘密</del></p>
]]></content:encoded>
					
					<wfw:commentRss>/archives/165.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
