行末でカーソルが点滅するようにプロンプ​​トに((実行可能)文字列)をエコーし​​ます.

行末でカーソルが点滅するようにプロンプ​​トに((実行可能)文字列)をエコーし​​ます.

(a (executable-)string)カーソルが行の末尾に来るようにプロンプ​​トをどのようにエコーできますか?

このようにEnter実行を押すか、行をCtrl捨てることができますC

これは可能ですか?

私は(インタラクティブ)bashスクリプトがより良いことを知っていますが、単純に保ちたいと思いました。

例:

echo_to_prompt "rm -R ./tmp/logs/delete_me_every_once_in_a_while/"

結果は次のとおりです。

user@machine:~$ rm -R ./tmp/logs/delete_me_every_once_in_a_while/[CURSOR]

答え1

シェルスクリプトまたは通常のコマンドラインでecho_to_prompt()コマンドを使用する必要がある場合は、単に次のものを使用できますread

#!/bin/sh

echo_to_prompt() {
        echo -n "$USER@$HOSTNAME:$PWD $" $@
        read && $@
}

echo_to_prompt rm -R ./tmp/logs/delete_me_every_once_in_a_while/

コマンドラインで使用するには、.bashrc/.profile/... に echo_to_prompt() 関数を追加します。

答え2

いくつかあります。制御シーケンスこれを端末に送信すると、一部の入力がシミュレートされます。ただし、入力を直接シミュレートすることはできません。これは特に有用ではなく、制御文字を含むファイルを表示するときにランダムな入力を生成するのは危険です。

これらの制御シーケンス(デバイスステータスレポート、マウス位置レポートなど)のほとんどは、入力しても無害な制御シーケンスを再送信します。いくつかの従来の端末(以前のバージョンのxtermを含む)には、ウィンドウタイトルを再送信する制御シーケンスがあります。これは他の制御シーケンスを介して設定できますが、最新の端末はこのコマンドを無視します。

簡単に言えば、やりたいことを正確に避けることは不可能です。

答え3

zshを使用してください。

zle-line-init() {
  ((SECONDS - last < 300)) && return
  LBUFFER="rm -R ./... "
  last=$SECONDS
  zle -R
}
zle -N zle-line-init

(5分ごとに(最大)実行)。

しかし、私はプロンプトにコマンドが表示されるのが好きではありません。

関連情報