質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

zsh

zshは、UNIX系OSのシェルの1つです。 cshやksn系のコマンドライン編集機能も実装されたシェルです。

Q&A

解決済

3回答

569閲覧

シェルで対話的に行を編集修正するインターフェイスはありませんか?

noc

総合スコア73

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

zsh

zshは、UNIX系OSのシェルの1つです。 cshやksn系のコマンドライン編集機能も実装されたシェルです。

0グッド

0クリップ

投稿2022/05/05 05:02

編集2022/05/05 05:04

シェル(できればzsh)で使える、行編集インターフェイスはありませんか?

例えるなら vim の input() 関数のようなものです。(これは専用のコマンドラインが提示され、ユーザーがこのコマンドラインに入力した文字列を返します。EnterキーあるいはEsc キーで編集を終了してユーザーが入力した結果を返却します。)
あるいはミニバッファのようなものです。

シェルのコマンドラインの操作感とあまり変わることなく、カーソルを備えた標準的なコマンドラインで編集できればと思っています。

これの用途は、スクリプト中で、あるファイルに書き込む文字列をユーザーに最終確認させ、ユーザーが望むならその文字列を修正させてから登録することを想定しています。
よって、初期文字列が与えられるようにしたいです。

シェルでの対話処理手段としてよく紹介されている read ではただユーザーからの入力を受けるだけで、文字列を自在に修正して返すということができませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

zsh(zle) のビルトインコマンド vared が使えると思います。

以下は、変数 line に初期値を設定し、emacs形式の行編集をさせて [] で囲んで出力するスクリプトの例です。

zsh

1line="初期値" 2 3vared -M emacs -p "プロンプト: " line 4 5echo "[$line]"

投稿2022/05/06 01:41

doda

総合スコア947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2022/05/06 04:48

やはりそういう機能がちゃんとあったんですね。
noc

2022/05/06 10:34

素晴らしい!惜しむらくはこれがzle の中で実行できないということです。 (vared:33: ZLE cannot be used recursively (yet) というエラーが発生する)
noc

2022/05/06 21:22

``` $ zsh -c 'line="$0"; vared -p "> " line; echo $line' "XXX YYY ZZZ" ``` で無理やり動かそうとしたのですがどうもおかしな挙動をしますね。 zsh -c 内部で実行すると、初期値を編集することができなくなるようです。
guest

0

Bashなら、read -e-i 初期値なのですが、どうもZshのreadには無さそうです。
もしかするとread以外のコマンドで出来るのかもしれませんが。

Bashの機能を使うとすると、

Zsh

1foo=$(bash -c 'read -e -i 初期値 aaa;echo "$aaa"')

スクリプト全体をBashで書くというのもありでしょう。

投稿2022/05/05 08:00

otn

総合スコア84557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

noc

2022/05/05 08:56

bash だとここまで手軽な手段があったのですね!!
noc

2022/05/06 21:42

``` bash -c 'read -ei "$0" -p "> " line; echo "$line"' "XXX" ``` はお手軽な方法です。残念ながら ZLE の中では動きませんでした(実行されずに終了される?)
guest

0

こういうのがあります。
zshのコマンドラインを任意のテキストエディタで編集する - Qiita

私なら、「一時ファイルを生成→それを編集するべくエディタを起動→保存された一時ファイルを適切に処理」を実行する専用シェルスクリプトあるいはperlスクリプトを組みますね。

投稿2022/05/05 05:44

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

noc

2022/05/09 23:35

下手にシェルスクリプトで頑張らずややこしい作業はperl、ユーザー対話型編集はエディタに投げるのも一つの手ですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問