Macでターミナルとシェルを使うための基礎知識 - 環境の構築と基本的なファイル操作を知る
Macでターミナルとシェルを活用し、サクサクと作業をするには?シェルに関する多数の執筆を持つ、「シェル芸人」こと上田隆一さんが基本のテクニックを解説します。
こんにちは。千葉工業大学未来ロボティクス学科の上田( @ryuichiueda )です。というよりシェル芸の人と呼ばれることが多い上田です。
この記事は、「Macでターミナルやシェル、コマンドを使う」というテーマでお送りするものです。通常、シェルの話になるとサーバとして利用されるOSを環境に指定することがほとんどです。この企画もそういう暗黙の前提があったはずなのですが、「せっかくエンジニアにはMacユーザーが多いのだから、Macで普段使いできるような解説を書きたい」と筆者がダダをこねてねじ曲げて、これを書いております。
シェル(ターミナル)というと「黒い画面」と恐れられるような存在ではあるのですが、しょせんは道具です。少しずつ便利に使えるようになってもらえれば、という軽い気持ちで執筆していますので、お付き合いください。読んでいて簡単すぎる場合には、身の回りの「使ってない人」に押し付けない程度に紹介ください。
ただ、初心者向けで終わるなともくぎを刺されているので、後半はワンライナーをさく裂させます。
今回の内容
・ターミナルの外観をターミナルとコマンドを使って変える
・Finder代わりにターミナルとコマンドを使う
・シェルの設定ファイルを編集してターミナルの表示に色を付ける
・ファイルの検索をしながらシステムに潜り込む
今回の環境
・OS: macOS High Sierra(バージョン10.13.6)
・マシン: Parallels Desktop上の仮想マシン
・ターミナル(Terminal.app): バージョン2.8.3
・シェル: bash 3.2.57(1)-release
注意
1カ所だけシステムのファイルを扱うところがあって万が一の場合、ご自身のMacに不具合が出る可能性があります。試す前にはTime Machineなどでバックアップをお願いします。また、本記事を試して生じた不具合等については、筆者や掲載者は責任を負いかねますのでご注意ください。
コマンドのコピペでターミナルをカスタマイズ
最初に、細かい説明は抜きにして、ターミナルのカスタマイズをターミナルから使ってやってみましょう。早速、Launchpadからターミナルを立ち上げてみましょう。念のためですが、これ↓です。
立ち上げると、次のような画面が現れます。地味です。以後、この画面の「$
」(プロンプト)の右側に何かを書くことによって便利にMacを使っていくわけですが、ほかのアプリのようにもうちょっとカラフルにしたいかなというところです。
通常この設定は、ターミナルのメニューから「環境設定」を選んで、そこで好きなようにGUIをいじって設定します。
ただ、このような情報はGoogleで「ターミナル Mac カスタマイズ」で検索することでもいろいろと調べられます。そこで、もう少しマニアックな方法をとってみたいと思います。
ひとつ注意を。 これからご紹介する操作を試すと、「my」というプロファイルを作成・保存します。すでにターミナルの設定に「my」というプロファイルが存在する場合、上書きされてしまうので、ご注意ください。また、現在のターミナルのプロファイルを保存してください。普段、ターミナルを使わず、この注意に心当たりがない場合は大丈夫です。
まず、Macがインターネットに接続された状態で次のコードをコピーしてください。
curl -L https://bit.ly/2LM2vDq > /tmp/my.terminal open /tmp/my.terminal
そして、ターミナルが開いていない場合はターミナルを開き、画面にコードを貼り付けます。すると、次のように濃紺色のターミナルが開きます。開かない場合は、元のターミナルでreturnキーを押すと開きます。
次に、開いた濃紺色の方のターミナルで次のコードをコピペします1。ターミナルが閉じない場合は、元のターミナルでreturnキーを押して閉じてください。
defaults write com.apple.Terminal "Default Window Settings" my defaults write com.apple.Terminal "Startup Window Settings" my exit
これでターミナルのメニューから「ターミナルを終了」をクリックして、その後Launchpadで再度ターミナルを起動すると、濃紺色のターミナルがデフォルトで開くようになります。うまくいかなかった場合は、1行ずつコピペしてみたあとにターミナルを終了し、再度起動してみてください。
ターミナルは少しは使える方がいい
以上、コピペだけでターミナルの外観を変えました。この例に限らず、ターミナルを普段から使う人同士は、普段から質問への回答や作業の依頼をチャットにコマンドを貼り付けて済ますということをよくやります。
普段から使わない人に対してぶっきらぼうにこれをやると嫌がらせと捉えられてしまいますが、使う人からすると、これが「どこどこの画面を開いて……」とやるのは少々面倒です。
この意識のズレが互いにフラストレーションになることもありますが、必要なのは双方の歩み寄りです。ということで、筆者からはターミナルに興味を持ってもらえるように頭をひねって書いてますので、普段使わない人ももう少しお付き合いください。これから何十年もPCを使うことを考えると、文字だけで、しかもさまざまなシステムを扱えるシェルやコマンドというものに慣れておくことは損ではないのかなと思います。
ここまでのおさらい
ここで、今やった手順について、少し深掘りしてみます。長いウンチクになりますが、一言で言うと、「ターミナルの中でシェルを使うことで、ソフトウェアやファイルを扱える」ということになります。
ターミナルとは
まず、「ターミナル(日本語で端末)ってなに?」という話ですが、これはもともと、昔のある時期のコンピュータにつながっていたタイプライタとプリンタを意味します。
タイプライタで文字を打ってコンピュータに命令すると、コンピュータがそれを受けて文字を返してきて、それがプリンタで印字されて出力されます。プリンタはその後、テレビモニタに置き換わりました。古い話です。
Macのターミナル(Terminal.app)は、この古めかしい端末の動きを再現するソフトウェアです。Terminal.appはMac自身に接続しており、やはりなにか文字を打つと、Macが仕事をして結果(出力)を返します。
例えば、ターミナルで次のコマンドを打つと、curl
というプログラムがMac上で動き、 URL
の場所からデータをダウンロードしてきます。このダウンロードされたデータが「出力」として画面にザーッと表示されます。
curl -L https://bit.ly/2LM2vDq
やってることは電卓とそんなに変わりません。文字を打ち込んだら、何かの処理をコンピュータがやってくれて、結果が画面に出力された。ただそれだけです。
シェルの役割
ところで、今述べたようにターミナルは単に文字を受け付けて文字を吐き出す機械であって、受け付けた文字を解釈して出力を返すのは別の道具の仕事です。
この仕事の窓口をしているものは「シェル」と呼ばれます。上のcurl
の例では、シェルはこの文字列をcurl
と-L
とURLに分けて、ソフトウェアであるcurl
に-L
とURLを渡します。そして、シェルはcurl
からデータを受け取り、これを端末に返しています。
シェルにはさまざまな種類がありますが、本記事ではターミナルを立ち上げると同時に立ち上がるBashを使っています。また、シェルというとBashのように文字だけ扱うもののことを指すことが多いのですが、GNOME Shellのように、GUIインタフェースの名前に使われることもあります。
シェルは、ソフトウェアの入出力も扱いますが、同時にファイルも扱います。例えば、curl
の後ろに付けた> /tmp/my.terminal
は、プログラムの出力を/tmp/my.terminal
に保存したいときのBashへの命令方法です。Bashは、> ...
を解釈し、命令のとおりにcurl
からのデータをファイルに書き出します。
また、ソフトウェアcurl
もどこかファイルに保存されているわけで、BashはHDDやSSDなどから探してきて実行しています。シェルでは、curl
のように文字列で呼び出すソフトウェアを「コマンド」と呼びます。
ターミナル+シェル+コマンドでできること
コンピュータというのはファイルとプログラムが扱えればだいたいのことができるので、ターミナルやシェルを扱えるとたいていのことができることになります。また、マウスやタッチパッドが介在する操作と比べて、作業の自動化が簡単です。先ほどのコピペはその例として示しました。
一方、シェルの仕組み上、ユーザーに画像などを提示することはできません。地味でとっつきにくいというのも敬遠される理由です。ただ、Macには先ほど使ったopen
やdefaults
など、その溝を橋渡しするコマンドが存在しており、使い方を知っておくと楽できる場面があります。
シェルをFinderのように使う
ということで、なるべくすぐに使える操作からシェルとコマンドの使い方を確認していきます。Finderの機能をコマンドで代用するところからシェルに慣れていきましょう。
まず、ターミナルからダウンロードしたファイルを開くということをやってみます。下準備としてWebブラウザで好きな画像を開いて保存しておいてください。
ls
で表示、cd
で移動、open
で開く
ファイルやディレクトリ2のリストはls
というコマンドで調べることができます。
macos-10:~ ueda$ ls Desktop Downloads Movies Pictures Documents Library Music Public
このリストは、 Finderのメニューの「移動」から「ホーム」を選ぶと GUIで見ることができます(名前が日本語になっていますが)。
ターミナルがFinderと同じものだと考えると、ターミナルを立ち上げることは、この「ホーム」が開くことと解釈できます。
ファイルやフォルダの詳細が見たいときは、Finderでは次のような画面にします。
コマンドでもls -l
と打つとほぼ同じものが見られます。
-l
は、コマンドls
に与えている情報で、「引数」と呼ばれます。引数は次のように、半角スペースで区切って記述します。
$ コマンド 引数 引数
また、-l
のようにコマンドの挙動を変える引数は「オプション」と呼ばれます。
ソートもできます。次の例はls -ltr
を使い、古いものが上に来るように並び替えして表示する例です。 -ltr
のt
が時刻順、r
が順番の反転を意味します。それぞれ-t
や-r
と独立したオプションとして渡しても機能します。
横道にそれましたが、ファイルを開く操作に戻りましょう。 ls
したときのDownloads
(=Finderで見たときの「ダウンロード」)が、普段ブラウザから何かをダウンロードしたときにファイルがたまっていくディレクトリです。
このディレクトリに移動してみましょう。 Finderではフォルダをダブルクリックする操作と同じです。
移動にはcd
というコマンドを使います。まず、ここまで打ちます。
macos-10:~ ueda$ cd Dow
その後、Tabキーを押します。すると、あとの文字は補完されます。
macos-10:~ ueda$ cd Downloads/
この機能はシェルのタブ補完と呼ばれます。タブ補完は必ず使うクセを付けましょう3。
補完は候補が2つ以上ある場合には素直に効きませんが、その場合には適宜文字を打ち込んで候補を絞ってください。上の例ではDocuments
とのバッティングを避けるためにDow
まで打ちました。
補完が終わったらreturnキーを押してコマンドを実行します。これでDownloads
ディレクトリへの移動が完了します。
macos-10:~ ueda$ cd Downloads/ macos-10:Downloads ueda$
ここでls
を使うと、中のファイルが見られます。
macos-10:Downloads ueda$ ls ai_kanabou_buki.png
ai_kanabou_buki.png
を開いてみましょう。open
という、アイコンのダブルクリックに相当するMac固有のコマンドを使います。
macos-10:Downloads ueda$ open ai_kanabou_buki.png
この状態でreturnキーを押すと、次のようにプレビューが立ち上がります。これで目的が果たせました。
また、複数の画像を一気に開くということもできます。例えばDownloads
の中にいくつかPNG画像があるなら、
macos-10:Downloads ueda$ open *.png
で、次のようにプレビューで「全xページ」とまとめて開くことができます。
*.png
は、拡張子が.png
の全ファイルを指します。もし画像をDownloads
内に水増ししたいならば、screencapture
というコマンドを使うとスクリーンショットを指定したファイル名で保存してくれます。
macos-10:Downloads ueda$ screencapture hoge.png
さらに、open
を使えば、プレビューだけでなく、ブラウザで画像を開くということも可能です。
macos-10:Downloads ueda$ open -a firefox ai_kanabou_buki.png
上記のコマンドのように-a アプリケーション名
というオプションを加えます。open -a firefox ...は、アニメーションGIFなどを閲覧するときによく使います。
今の操作が便利かどうかは人によって感じ方がさまざまです。最初はコマンドls
、cd
、open
を覚え、さらにls -ltr
の場合などオプションをいくつも覚えていかないといけないので面倒なのですが、普段からよくやる操作についてはGUIでのショートカットのように覚えていくとよいでしょう。もし途中で面倒になったら、次のようにopen .
と打ちましょう。
macos-10:Downloads ueda$ open .
するとFinderが開くのでFinderを使った操作に戻ることができます。
また、今はホームからDownloads
というディレクトリに入ったわけですが、ホームに戻る場合には、次のコマンドを使います。
macos-10:Downloads ueda$ cd ..
..
は、「1つ上のディレクトリ」を示します。ただし、ホームに戻る場合に限っては、次のコマンドでもかまいません。
macos-10:Downloads ueda$ cd
cd
だけで、どこのディレクトリからでもホームに戻れます。
mv
で名前の変更、cp
でコピー、rm
で削除
さらにファイルを操作するコマンドを使ってみましょう。名前の変更はmv
(move filesの意)を使います。次の例は、ai_kanabou_buki.png
をthis_is_it.png
に変える処理です。しつこいですが、タブ補完を必ず使いましょう。
macos-10:Downloads ueda$ ls ai_kanabou_buki.png macos-10:Downloads ueda$ mv ai_kanabou_buki.png this_is_it.png macos-10:Downloads ueda$ ls this_is_it.png
次に、ファイルをコピーしてみます。cp
(copyの省略)を使います。
macos-10:Downloads ueda$ cp this_is_it.png ai.png ###lsで確認### macos-10:Downloads ueda$ ls -l total 1184 -rw-r--r--@ 1 ueda staff 302304 1 8 11:05 ai.png -rw-r--r--@ 1 ueda staff 302304 1 4 11:14 this_is_it.png
コピー元のファイルを消してみましょう。rm
(removeの省略)を使います。
macos-10:Downloads ueda$ rm this_is_it.png macos-10:Downloads ueda$ ls ai.png #ai.pngだけ残る
ファイルの操作コマンドの紹介はとりあえずここまでにしておきます。普通、初心者向けの資料ではこのあとにrmdir, mkdir, chmod, ...
と続いて正直、つまらないわけですが、GUIがあるので、何かわからなくなったらopen .
して逃げてしまえばなんとかなります。
lsの出力に色を付ける
今度は、open
の便利な使い方の例を示し、ついでにシェルをカスタマイズします。カスタマイズの内容は、ls
の出力に色を付けて見やすくするというものです。現状、ls
の出力は次のように全部白い文字で出てきますが、ls -G
を使うとファイルの種類に応じて色を付けてくれます。
次の例は、執筆に使っているMacのデスクトップをls
したものです。ピンク色で表示されたParallels Shared Folders
がリンク(エイリアスやショートカットと呼ばれるもの)、青い色のsecret
がディレクトリ、ほかが普通のファイルです。
ただ、次のような不満もあります。
- いちいち
ls -G
と打つのが面倒 - 青背景に青字は見にくい
これを改善してみましょう。まず、次のコマンドを打ちます。
macos-10:~ ueda$ touch ~/.bash_profile
touch
は、「ファイルに触る」という意味のコマンドで、touch
の後ろに書いたファイルがない場合には空のファイルを作ります。また、ファイルがある場合には更新時間が現在時刻に変更されます。
次に、open -e <ファイル名>
で、Macの「テキストエディット」を立ち上げることができるので、今作った空のファイルを開きます。
macos-10:~ ueda$ open -e ~/.bash_profile
ファイルが開いたら、次のように記述して保存します。コピペでかまいません。ただ、そのままコピペすると改行コードがおかしくなってしまうので4、1行ずつコピーして自分で改行するか、そのままコピペしたあとに自分で改行を打ち直してください。
export CLICOLOR=1 export LSCOLORS=DxGxcxdxCxegedabagacad
テキストエディットにこの文字列を貼り付けたところを示します。
これで一度端末を閉じて、開くと(もちろん、慣れている人はsource
で大丈夫です。)、次のように見やすい色が付いているはずです。
ここまでのおさらい
今の操作も簡単だったと思いますが、少し裏側で起こっていることに踏み込んでみましょう。.bash_profile
は、Bashの設定ファイルです。これをホームに置いておくと、Bashが立ち上がるときに読み込んで自分自身で実行します。頭に.
が付いているファイルは隠しファイルです。Finderでもls
でも表示されません。ただし、ls -a
と打つと表示できます。
macos-10:~ ueda$ ls -a . .bash_history .viminfo Movies .. .bash_profile Desktop Music .CFUserTextEncoding .bash_sessions Documents Pictures .DS_Store .lesshst Downloads Public .Trash .ssh Library
このように、他にもいろいろ隠しファイルやディレクトリがあることが確認できます。
Finderでは、shiftキーとcommandキー、.キーを同時に押すと表示/非表示を切り替えられます。
または、ターミナルで次のコマンドを打つことでも切り替えることができます。
##表示## macos-10:~ ueda$ defaults write com.apple.finder AppleShowAllFiles true macos-10:~ ueda$ killall Finder ##非表示## macos-10:~ ueda$ defaults write com.apple.finder AppleShowAllFiles false macos-10:~ ueda$ killall Finder
次に、.bash_profile
の中身を説明します。このファイルは設定ファイルであると同時に、 Bashへの指令、つまりプログラムになっています。シェルのプログラムは「シェルスクリプト」と呼ばれ、システムの設定やファイル処理のプログラムによく利用されます。
ただ、プログラムといっても単にコマンドを呼び出しているだけですので、上から順に解読していけば理解できます。
まず、どちらの行でも使っているexport
というコマンドですが、これは、ls
などのコマンドが使う情報をセットするためのものです。この情報は「環境変数」と呼ばれます。1行目を見てみましょう。
export CLICOLOR=1
これは、CLICOLOR
という名前の環境変数を作って1
という値をセットしています。Macのls
はCLICOLOR
という環境変数があるとls -G
と同じ振る舞いをするので、この設定をしています。
どこにそんなことが書いてあるかというと、次のコマンドで確認できます。
macos-10:~ ueda$ man ls
いろいろ説明が表示されるので、オプション「-G
」の説明のところまでタッチパッドでスクロールするか、下矢印キー、スペースキー、あるいはJキーを押してスクロールしましょう。
-G Enable colorized output. This option is equivalent to defining CLICOLOR in the environment. (See below.)
このように書いてあります。man
はマニュアルのコマンドです。読んだらq
と打つと終了できます。
2行目のコマンドは、色分けして表示するための設定です。
export LSCOLORS=DxGxcxdxCxegedabagacad
これも、man ls
してLSCOLORS
のところを読むと意味が分かります。ただ、白状しておくと、本記事で使っているLSCOLORS=DxGx...
は、さまざまな人が使ってウェブに掲載しているものの使い回しです。
本当は出典を記載すべきなのですが、誰のものがオリジナルなのかよく分からないので割愛させていただきます(自分の書いたページも出てきました……)。
コマンドでファイルを探す
ここからはFinderの検索に相当することをコマンドを使ってやってみます。お題は「システムの中に侵入して、ターミナルの外観が記録されているファイルを調べる」です。
まず、find
というコマンドを使ってみましょう。find
はfind ディレクトリ
という使い方をします。次の例は、ホームを対象にfind
を使った例です。
macos-10:~ ueda$ find ~/ (出力がザーッと流れる)
読めないくらい速くファイルのリストが流れて「何がfind
(見つける)だ」という感じです。そしてこのコマンドは、単に存在しているファイルのリストを出力するだけです{$annotation_5}。
で、これをどう使うかというと、他のコマンドと組み合わせます。例えば、ターミナルに関係するものは、com.apple.Terminal
という名前のディレクトリにあるので、この名前で検索をかけてみましょう。上矢印を押すと前に打ち込んだfind ~/
が表示されるので、それに続けて次のように| grep -F ...
と打ち込みます。
macos-10:~ ueda$ find ~/ | grep -F 'com.apple.Terminal' /Users/ueda//Library/Saved Application State/com.apple.Terminal.savedState /Users/ueda//Library/Saved Application State/com.apple.Terminal.savedState/window_1.data (以下略)
grep
はfind
から文字列を受け取り、引数に指定された文字列com.apple.Terminal
を探し、この文字列のある行だけを出力します。-F
というオプションは「単に渡した文字列を検索してくれ」という意味です。また、引数をシングルクォート('
)で囲っています。説明をすると長くなるので、とりあえずgrep
を使うときはこうしておくと無難と書いておきます。
find
とgrep
の間の|
は「パイプ」を表します。find
の出した文字を、パイプを通してgrep
に流し込むイメージです。
Macのさまざまな設定は、plistファイルというファイルに格納されています。拡張子が.plist
のファイルです。先ほどの出力からさらに絞り込んでみましょう。節操なく、またgrep
をつなげます。
macos-10:~ ueda$ find ~/ | grep -F 'com.apple.Terminal' | grep 'plist$' /Users/ueda//Library/Saved Application State/com.apple.Terminal.savedState/windows.plist /Users/ueda//Library/Preferences/com.apple.Terminal.plist
2つファイルが見つかりました。今度のgrep
にはplist$
という文字列を渡しましたが、$
は「行の最後」という意味に解釈されます。したがってこのgrep
は「plistで終わる行」を出力するという作業をします。
これを直接いじるとシステムを壊す場合があるので、ホームにコピーしましょう。慣れないうちは検索結果をコピペでもよいのですが、xargs
というコマンドを使ってみます。次の例は、xargs
とls
を組み合わせた例です。
macos-10:~ ueda$ find ~/ | grep -F 'com.apple.Terminal' | grep 'plist$' | xargs -I@ ls @ /Users/ueda//Library/Saved Application State/com.apple.Terminal.savedState/windows.plist /Users/ueda//Library/Preferences/com.apple.Terminal.plist
xargs -I@ ls @
は、ls @
の@
の場所に、パイプから来た文字列を1行ずつ当てはめるという意味になります。これがうまくいったら、次のようにwindows.plist
とcom.apple.Terminal.plist
をコピーしてきます。
##ls @をcp @ ./に変更## macos-10:~ ueda$ find ~/ | grep -F 'com.apple.Terminal' | grep 'plist$' | xargs -I@ cp @ ./ ##確認しましょう## macos-10:~ ueda$ ls Desktop Downloads Movies Pictures com.apple.Terminal.plist Documents Library Music Public windows.plist
さらに、com.apple.Terminal.plist
の中をのぞいてみましょう。このファイルはバイナリなので、専門のツールplutil
でテキストにします。このままだとターミナルをザーッと文字列が流れるだけなので、さらに、less
というコマンドにデータを渡してman
のように閲覧できるようにします。操作方法はman
と同じです。
読んでいくと、何度かmy
という、最初に読み込んだターミナルの設定の名前が出てきます。また、下に行くと、my
の各種パラメータが記録されている部分があります。
macos-10:~ ueda$ plutil -p com.apple.Terminal.plist | less "my" => { "BackgroundAlphaInactive" => 0.5 "BackgroundBlur" => 0 "BackgroundBlurInactive" => 0.4851296164772727 "BackgroundColor" => <62706c69 73743030 d4010203 ...
これ以上、plist
の詳細に踏み込むのはシステムを壊したり面白すぎて帰ってこられなかったりとさまざまな理由で危険なのでここでやめておきます。一日中ターミナルを使って生活している人は、こんなふうにしてファイルを探している――今ご覧いただいた操作はそんな一例です。
今回はたまたまMacの設定ファイルでしたが、テキスト化できるファイルならなんでもfind
やgrep
、その他コマンドで探して中身を見るということができます。一度もマウスやタッチパッドを触る必要がありません。ただ、検索した画像をアイコンで見るということはできないので、そこはうまくFinderと使い分けることをおすすめします。
まとめ
本記事ではMacでのターミナル、シェル、コマンドの操作についていくつか例を挙げ、操作の方法や仕組みについて説明しました。少し雑多な説明になってしまいましたが、次のことをお伝えしたつもりです。
- ターミナルが使えると楽ができる
- ファイル操作のコマンドがよくわからなければ
open .
で逃げられる - MacにはGUIや設定に関する専用のコマンドがある
- コマンドは組み合わせて使う
執筆していて感じたのは、筆者の場合、Linuxで同様の記事を書くと、なんとしてもターミナル内で完結させようとしてしまって硬派な内容になるのですが、 Macにはいろいろな逃げ道があるので書いていてもそういう内容にはならないということです。Macは常に使うOSでもあるので、シェルの操作をストレスなく覚えるには適しているのではないかと思います。
参考URL
- @djmonta ターミナルから Mac を設定する(defaults write コマンド等), Qiita (2018年1月21日閲覧)
上田隆一(うえだ・りゅういち) @ryuichiueda
編集:澤田竹洋(リブロワークス)
どちらでもよいのですが、おそらくこちらのほうが楽です。↩
「ディレクトリ」は、フォルダのもともとの呼び名です。フォルダというのは文具からの比喩です。特にこだわる必要もないのですが、コマンドを扱っている場合はディレクトリと呼んだほうがしっくりくるので、本記事ではディレクトリで統一します。↩
講義で学生に教えていると使ってくれないので、この場を借りてほえさせていただきます。↩
テキストエディットを使ってコピペすると改行コードがCRになってしまうことがあるようです。もちろん、CLIのエディタではそのようなことは起こりません。わざわざテキストエディットを使っているのは敷居を下げるためなのですが、敷居を下げると罠がいっぱいでかなりつらいです。CLIだけでやりたいです……。↩