(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分ごとに(最大)実行)。
しかし、私はプロンプトにコマンドが表示されるのが好きではありません。