Bash には 処理を実行せずに 文法のチェックだけをしてくれるオプション "-n" があります。
[test.sh]
if [ -z test.txt ]; then
echo "OK"
endif
$ bash -n test.sh test.sh: line 4: syntax error: unexpected end of file
このオプションを付けることで
コマンドを実行せずに
文法だけをチェックしてくれます。
(逆にコマンドの実行などはチェックできません)
この手の Bash のオプションの指定方法は いくつかあります。
@bash コマンドの引き数に指定する。
$ bash -n test.sh
Aスクリプトの先頭に記載する。
#!/bin/bash -n
Bset コマンドで指定する。
set -n
スクリプトの起動だけを確認したいときなど 色々と応用できます。
セルをクリックしたら 偶然表示されて 驚いたのですが Excel には 2007 から翻訳機能があるそうです。
[参考]
【TIPS】Excelの翻訳機能を辞書代わりに使う方法 | Excelを制する者は人生を制す 〜No Excel No Life〜
例えば 次のように 英単語の入った セルを [Alt] を 押しながら マウスでクリックします。
「リサーチ」パネルに 翻訳結果が表示されます。
日本語から英語もできます。
「校閲」タブの「翻訳」から表示させることもできます。
翻訳機能の精度は よくわかりませんが こんな機能まであるとは すごいですね。
Word には「隠し文字」という文字飾りがあります。
(Word 2010 で確認)
以下のように「フォント」のダイアログでチェックするか [Ctrl]+[Shift]+[H]のショートカットから設定することができます。
たとえば、次のように文字を選択して・・・。
文字飾り「隠し文字」を設定すると、選択した文字が隠れます。
「こんにちは」が表示されなくなってます。
隠れている文字を表示するには、 「段落」にある「編集記号の表示/非表示」を使います。
隠れていた文字が下線付きで表示されます。
ただし、これは文書全体の編集記号などを表示するため、 特定の隠し文字を表示させるわけではありません。
文書内に「隠し文字」があるかどうかを調べる方法もあります。
「情報」にある「共有情報」を見ます。
通常は「隠し文字」については何も表示されませんが・・・。
文書内に「隠し文字」があるばあい、次のように表示されます。
「隠し文字」はデフォルトで印刷しない設定ですが、 印刷オプションを設定することで 印刷することもできます。
隠し文字の使い道ですが 普通のコメントであれば、 そもそも Word には コメント機能もあります。
ですので、次のように 漢字の読みなどに指定して 印刷物を使い分けたいときに 利用するのが良いのではないかと思います。
Bash で以下のようなループ処理を書くと パイプ以降が別プロセスになってしまうため その中で設定した変数を、ループ処理の外で参照することができません。
cat test1.txt | while read val1 val2
do
val3=$val1
done
echo $val3 # ←最後のval1は入っていない
単純にテキストから読み込む場合 次のように書くと 別プロセスを作らずに済むため ループの中で設定した変数を ループの外で参照することができます。
while read val1 val2 do val3=$val1 done < test1.txt echo $val3 # ←最後のval1が入っている
コマンドの実行結果をループに 渡している場合も・・・
cat test1.txt | grep -v "^a" | while read val1 val2 do val3=$val1 done echo $val3 # ←最後のval1は入っていない
次ような書き方をすることができます。
while read val1 val2 do val3=$val1 done < <(cat test1.txt | grep -v "^a") echo $val3 # ←最後のval1が入っている
( "<" の後の空白に注意してください)
プログラム的な処理が必要なときに 助かります。
Excel や Word で 背景が透明なオブジェクトを複数重ねてしまうと 下になったオブジェクトが選択しにくいことがあります。
こういうときは 「検索と選択」の中に「オブジェクトの選択と表示」というメニューがあるので それを使います。 (Excel 2010 で確認)
図形の一覧なんかが出てきますので・・・。
リストから簡単に選択できます。
Word にも同様の機能があります。 (Word 2010 で確認)
イライラしそうな操作には ちゃんと機能が用意されてますね。
気付いていませんでした。
コマンドプロンプトのバッチ処理ファイルでコメントを書くときに REM を使いますが REM はコメントのマークではなく 「何もしない」コマンドでした。
C:\> REM コメント!
"/?" を付けるとヘルプも表示されます。
C:\> REM /?
バッチ ファイルまたは CONFIG.SYS にコメント (注釈) を記録します。
REM [コメント]
なので、次のような "/?" で始まる変な装飾を付けてしまうと。
REM /???? -- コメント -- ???/
C:\> test.bat
-- の使い方が誤っています。
このようにエラーが出てしまいます。
前回、PostgreSQL のパスワードを環境変数で設定するのは PostgreSQL 的には非推奨と書きましたが 推奨されている方法について書いておきます。
[参考]
環境変数 - PostgreSQL 9.3.2文書
以下のような内容を「~/.pgpass」に記載します。
hostname:port:database:username:password
ファイル名は、環境変数 PGPASSFILE で変えることができます。
複数記載することができ、 上から順にマッチしたものを使用してくれます。 環境変数と違って複数設定しておけるのは便利ですね。
localhost:*:testdb1:testuser1:testpassword1 localhost:*:testdb1:testuser2:testpassword2 localhost:*:testdb2:testuser3:testpassword3
"*" も使用できます。 ホスト名は、Unixドメインソケットの場合 でも "localhost" で良いそうです。
[参考]
パスワードファイル - PostgreSQL 9.3.2文書
$ chmod 600 ~/.pgpass
ファイルの権限を 600 にしていないとエラーになります。
以前、PostgreSQL のパスワードを
環境変数で設定する記事を書きましたが
PostgreSQL 的には非推奨のようです。
(一部のオペレーティングシステムではroot以外のユーザで環境変数が見える場合がるためとのこと)
[参考]
環境変数 - PostgreSQL 9.3.2文書
一部のオペレーティングシステムがどれを指すのかわかりませんが、 プロセスが使ってる環境変数の見方が気になったので ちょっと確認してみました。
まず環境変数を設定します。
$ export PGPASSWORD=testpassword
PostgreSQL のデータベースに接続するプロセスを作成します。
$ psql -U testuser -d testdb
psql (9.3.10, server 9.3.12)
Type "help" for help.
testdb=#
[Ctrl]+[z] プロセスを眠らせます。
[1]+ Stopped psql -U testuser -d testdb
起動中のプロセスを確認します。
$ ps PID TTY TIME CMD 28796 pts/0 00:00:00 bash 29754 pts/0 00:00:00 psql 29834 pts/0 00:00:00 ps
参考サイトによると、環境変数は「/proc/%{PID}/environ」に 格納されているそうです。
[参考]
Linux/Unixプロセス起動時の環境変数をダンプする | ギークを目指して
確認してみます。
$ cat /proc/29754/environ | sed -e 's/\x0/\n/g' | grep PGPASSWORD PGPASSWORD=testpassword
たしかに確認できました。
使用している環境では root ユーザでなければ 自分以外の環境変数は見れませんでしたが、 自分の環境変数を(rootの権限が使えれば、他のプロセスの環境変数も)確認したいこともあると思うので 覚えておくと良いのかもしれません。
通常、ワイルドカードを使うと 以下のようになるところを・・・。
$ ls -1 *.txt
1-1.txt
1-2.txt
2-1.txt
2-2.txt
3-1.txt
"!" を使うことで、逆に除外することができます。
$ ls -1 !(*-2.txt)
1-1.txt
2-1.txt
3-1.txt
この例では「*-2.txt」にマッチしないファイルが 表示されました。
tail コマンドの "-f" オプションは "--follow=descriptor" ということで 対象のファイルが再作成されると追いかけられなくなります。
$ tail -f test.txt
そういうときは、"--follow=name" か "-F" を使います。
$ tail -F test.txt
-f, --follow[={name|descriptor}] output appended data as the file grows; -f, --follow, and --follow=descriptor are equivalent -F same as --follow=name --retry
$ tail -F test.txt Fri Sep 9 12:14:01 JST 2017 Fri Sep 9 12:14:02 JST 2017 tail: 'test.txt' has become inaccessible: No such file or directory tail: 'test.txt' has appeared; following end of new file Fri Sep 9 12:14:12 JST 2017 Fri Sep 9 12:14:13 JST 2017
ちなみに ファイルが再作成されると上のように表示されます。
ファイルやディレクトリを操作するときに "*" や "?" などのワイルドカードを使いますが これが何によって定義されているのかを 考えたことがありませんでした。
これ、 Linux では glob という名前だそうです。
[参考]
Dev Basics/Keyword:glob(グロブ) - @IT
記事を読んで驚いたのが Linux では文字クラス([0-9a-z]みたいなやつ)も使えるとのこと。 Windows のコマンドプロンプトでは使えないため ワイルドカードだけだと思い込んでました。
$ ls -1 /var/log/vsftpd.log* /var/log/vsftpd.log /var/log/vsftpd.log.1 /var/log/vsftpd.log.2 /var/log/vsftpd.log.3 /var/log/vsftpd.log.4 $ ls -1 /var/log/vsftpd.log.? /var/log/vsftpd.log.1 /var/log/vsftpd.log.2 /var/log/vsftpd.log.3 /var/log/vsftpd.log.4 $ ls -1 /var/log/vsftpd.log.[2-3] /var/log/vsftpd.log.2 /var/log/vsftpd.log.3 $ ls -1 /var/log/vsftpd.log.[^3-5] /var/log/vsftpd.log.1 /var/log/vsftpd.log.2
うーん、これは便利。
こういうのは当たり前過ぎて、 知ってる人は「他の人も知ってる」と思って わざわざ伝えないものなのかもしれないですね。
ちなみに、ファイルをコピーするときによく使う {} の展開も glob の仕事だそうです。
$ ls -1 /var/log/syslog* /var/log/syslog $ cp -p /var/log/syslog{,.keep} $ ls -1 /var/log/syslog* /var/log/syslog /var/log/syslog.keep
PostgreSQL を使っていて ロケールの設定によっては ソート順が想定とは違う結果になることがあります。
ソート順に関するロケールの LC_COLLATE は データベース作成時にしか変更できないと思っていました。
[参考]
PostgreSQLのロケール(lc collate,lc ctype)の確認と変更
次のように SELECT 時に設定したり。
db=# SELECT * FROM tab1 ORDER BY col1 COLLATE "C" DESC;
後から列単位で変更もできるようです。
db=# ALTER TABLE tab1 ALTER COLUMN col1 TYPE VARCHAR COLLATE "C";
マニュアルに登場するのが 9.1 からなので おそらくその辺りで対応されたのではないかと。
[参考]
SELECT - PostgreSQL 9.1.5文書
ALTER TABLE - PostgreSQL 9.1.5文書
パソコンで資料を作成したときに 印刷イメージを確認しておくのは 大切なマナーだと思います。 特に Excel だとセルの中で文字列が切れてたり 表がはみ出してたりしますよね。
さらにカラーだとプリント代が高くなるため 会議には白黒印刷で・・・なんてことも多いのではないでしょうか?
Excel には印刷プレビューを白黒にする機能があります。
上図のように、「ページ設定」⇒「シート」に設定があります。