Replies: 1 comment 2 replies
-
ご提案ありがとうございます! $ nohup sleep 100 > /dev/null &
^^^^^^^^^^^^^^^ ^^^^^^^^^ redirection を独立したコマンドとして取り扱うという事は、文法的な構造まで立ち入らずに字句的に判定するという想定でしょうか。こちらでも今までに似たようなことを何となく思い浮かべたりすることもありましたが、もっと文法構造を反映したものを考えたりしていました。とはいいつつ実装が面倒そうだなあと思ったり。まあ、どちらの実装にしても quote された ここでは実装の面倒さだとかは考えない事にして自然な実装についてもう少し考えてみたいですね。例えば、以下のような場合にどの様に振る舞うと良さそうですか? cmd1 $(cmd2 A | cmd3 B) C
論理的に考えたら |
Beta Was this translation helpful? Give feedback.
2 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Emacsにおいて,「文 (sentence)」は「')', ']', ''', '"'などを含む,行末にあるか後ろに二つの空白を持つ'.', '!', '?' で終わるもの」として定義されています。
Vimにおいて,「文 (sentence)」は「'.', '!', '?' で終わり、その後に行末かスペースもしくはタブが続くもの」として定義されています。また,このsentenceをテキストオブジェクトのように扱え,既定では(・)に割り当てられているモーションキーを用いて,d3)(後方3文を削除)のような編集が可能です。
一方,ble.shにおいて,というよりコマンドライン操作全般において,EmacsやVimが定義する終止符などを含んだsentenceは,VCSのコミットメッセージやヒアドキュメントなどの数少ない場面を除いてあらわれないだろうと予想します。ですので,EmacsやVimのsentenceそのものを正確に再現しても,あまり使い道がないように感じます。
ここで,sentenceの定義をコマンドライン独特のものに改変・拡張することを提案します。コマンドラインにおける「コマンド文」を
「
制御演算子および空白文字以外のメタ文字[1]で区切られた前記以外の字句の連続
」
と定義します。
コマンド文の例(
^
による連続する波線で示した部分がコマンド文です)この「コマンド文」を,EmacsやVimが「文」に対して行うのと同じ操作を行えるようにする(例えばEmacs modeならM-aで「コマンド文の先頭に移動する」)というのはどうでしょうか。
もしよろしければ,ご一考頂けるとうれしいです。
呼称はbashの日本語manページの定義・用語を流用しました。具体的には `|`,`|&`,`&`,`;`,`(`,`)`,`<`,`>`,`||`,`&&`,`;;`です ↩
Beta Was this translation helpful? Give feedback.
All reactions