シェル(bash)でスペースの代わりに改行区切りでforループする方法

シェル(bash)のforループを使うとスペース区切りの文字列でループしてコマンドを実行することができます。(参考:forループに関する覚え書き

便利な機能ですがスペースではなく改行\nでループしたい場合もあるかと思います。そういう場合にはIFSを使ってdelimiterを変更するテクニックがあるそうです。

使い方

今回は次のようなテキストファイルを使って1行ずつコマンドを実行するサンプルを紹介してみます。

$ cat example.txt
aaa 12 34
bbb 56 78
ccc 90 12

普通にforループした場合

$ for i in `cat example.txt`; do echo $i; done
aaa
12
34
bbb
56
78
ccc
90
12

delimiterを\nに設定した場合

$ IFS=$'\n'
$ for i in `cat example.txt`; do echo $i; done
aaa 12 34
bbb 56 78
ccc 90 12

こんな感じで1行ずつコマンドを実行できます。

VirtualBox上でOpenGLを動かす設定

VirtualBox上でOpenGLを動かす設定がないか調べてみたところ、レジストリ設定を変更することで動作できるみたいです。

#12048 (No OpenGL Support for Windows 8) – Oracle VM VirtualBox
https://www.virtualbox.org/ticket/12048

設定するregファイルはこちらです。

AddOGLW8and10x64Corrected.reg

ただ、これは公式の情報ではないと思いますので、参考にされる場合は設定内容を理解した上で試してみてください。

scpの使い方メモ

scpを使うとローカルファイルをサーバーにアップロードしたり、サーバーにあるファイルをダウンロードしたりできます。ということで、その使い方をメモしてみました。

使い方

scp [オプション] <送信元のファイル> <送信先のパス>

サンプル1

example.gzというファイルをxxx.xxx.xxx.xxxサーバー(実際にはサーバーのIPアドレスもしくはドメイン名)の/path/to/ディレクトリにアップロード
(ログイン名はscpを実行しているクライアントのユーザー名)

$ scp example.gz xxx.xxx.xxx.xxx:/path/to/

ログイン名を変更したい場合はxxx.xxx.xxx.xxxの前にusername@を追加します。

$ scp example.gz [email protected]:/path/to/

サーバー側のSSHがポート番号22以外で動作している場合は-pオプションでポート番号を指定することができます。

$ scp -p 1234 example.gz [email protected]:/path/to/

サンプル2

example.gzというファイルをxxx.xxx.xxx.xxxサーバーからダウンロード

$ scp xxx.xxx.xxx.xxx:/path/to/example.gz .

ポート番号を変更するなどのオプションはサンプル1と同様です。

サンプル3

ディレクトリを扱いたい場合は-rオプションが使えます。

$ scp -r directory xxx.xxx.xxx.xxx:/path/to/