bashでbackspaceが動作しない場合の対処

April 11,2021 11:55 PM
Category:[bash]
Tag:[bash]
Permalink

bashでbackspaceが動作しない場合の対処方法を紹介します。

1.問題点

入力した文字を表示するという、簡単なスクリプト(test.sh)を作ってみました。

#!/bin/bash
 
while [ 1 ]; do
    read -p "> " line
    echo "$line"
done

このスクリプトで入力した文字をbackspaceで削除しようとすると、"^H"が表示されます。

# ./test.sh
>abc^H^H^H

ということで、bashでbackspaceが動作しない場合の対処方法を紹介します。

2.原因

まず、"stty -a"を入力して、端末設定を表示(抜粋)します。

# stty -a
speed 38400 baud; rows 24; columns 98; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>;

1文字消去のキーバインドは、

erase = ^?;

となっていますが、bashのbackspaceは"^H"が割り当てられています。

このため、backspaceを押下しても、割り当てられたキーが存在しないため、1文字消去ではなく、"^H"がそのまま表示されると思われます。

3.対処

スクリプト実行時にsttyコマンドを実施して、eraseのキーバインドをbackspaceに変更します。

#!/bin/bash
 
stty erase '^H'
 
while [ 1 ]; do
    read -p "> " line
    echo "$line"
done

追加するのは、

stty erase '^H'

の部分で、"^H"はシングルクォーテーションで括ります。

あるいはそのままの文字を入力したい場合、クォートせずに、Ctrl-v → Ctrl-hを入力します。

3.元のキーバインドに戻す

スクリプト内で設定したキーバインドは、終了後のターミナルに伝播されませんが、何らかの原因で戻らない場合、スクリプトの最後に、

stty sane

あるいは、

stty erase '^?'

を入力します。

#!/bin/bash
 
stty erase '^H'
 
while [ 1 ]; do
    read -p "> " line
    echo "$line"
done
 
stty sane

'^?'を直接入力したい場合は、クォートせずに、Ctrl-v → Ctrl-8を入力します。

Comments [0] | Trackbacks [0]

Workflowプラグインバージョンアップ(承認・差し戻し時の承認者へのCcメール追加等)

March 31,2021 11:55 PM
Category:[ワークフロー]
Tag:[MovableType, Plugin, Workflow]
Permalink

Movable Typeで承認ワークフローを実現する「Workflowプラグイン」をバージョンアップしました。

1.機能追加内容

承認時の承認メールをライターのみでなく、承認者にもCcで送信できる機能を追加しました。差し戻しメールについても、承認者にCcでの送信を選択できます。

Ccメールの送信する・しないは、承認者編集画面で承認順位別に行えます。

設定状態は承認者一覧画面で確認できます。

(クリックで拡大)

また、ライターや承認者が承認依頼する際の承認者の表示名を「ユーザー名」「表示名」から選択できるようにしました。

システム管理画面の設定画面

サイト別のプラグイン設定画面で設定することも可能です。

「ユーザー名」を半角英数、「表示名」を全角で運用している場合の表示は次のようになります。

「ユーザー名」を選択した場合の承認依頼画面

「表示名」を選択した場合の承認依頼画面

2.対象グレード

機能追加対象のグレードは、MT7の

  • 多段階承認版
  • 多段階承認版+日時指定版
  • 多段階承認+グループ・複数承認版

になります。

3.プラグインの詳細

Workflowプラグインの詳細については下記のリンクからどうぞ。

Workflowプラグイン
Workflowプラグイン

Comments [0] | Trackbacks [0]

MySQLで「The used SELECT statements have a different number of columns」となる場合の対処

March 30,2021 11:55 PM
Category:[MySQL]
Tag:[MySQL]
Permalink

MySQLで「The used SELECT statements have a different number of columns」となる場合の対処について紹介します。

1.問題点

MySQLで2つのテーブルを作りました、

mysql> create table foo ( id int, name varchar(32) );
 
Query OK, 0 rows affected (0.20 sec)
 
mysql> create table bar ( id int, name1 varchar(32), name2 varchar(32) );
Query OK, 0 rows affected (0.18 sec)
  :
(略)
  :
mysql> select * from foo;
+------+------+
| id   | name |
+------+------+
|    1 | aaa  |
|    2 | bbb  |
+------+------+
2 rows in set (0.00 sec)
 
mysql> select * from bar;
+------+-------+-------+
| id   | name1 | name2 |
+------+-------+-------+
|    1 | xxx1  | xxx2  |
|    2 | yyy1  | yyy2  |
+------+-------+-------+
2 rows in set (0.00 sec)

UNIONを使って2つのテーブルを結合し、表示させようとすると、「The used SELECT statements have a different number of columns」というエラーになります。

ということで、MySQLで「The used SELECT statements have a different number of columns」となる場合の対処方法を紹介します。

2.原因

エラーメッセージの内容より、SELECTで表示させるカラム数が異なっていることが原因です。

3.対処

SELECTで表示させるカラム数を一致させます。

(クリックで拡大)

Comments [0] | Trackbacks [0]
 1  |  2  |  3  |  4  |  5  | All pages