2017-06-09 10 views
0

私はRubyでスクリプトを作成しており、Rubyスクリプトを呼び出すZshellの履歴にコマンドを挿入します。私はこれを試みましたが、それは呼び出すZshellにアクセスできない(私は思います)RubyスクリプトからZsh履歴にコマンドを追加

#!/usr/bin/env ruby 
`zsh -c print -s what` 

ヒント?次のようにあなたがこれをやって行くことができる

+1

子プロセスは親の環境を変更することはできません(例えばhttps://stackoverflow.comを見ます/ a/263022/2088135) –

+0

'.zsh_history'ファイルがありますが、起動時にのみロードされるため、これが可能かどうかはわかりません。現在のシェルはその履歴をメモリ内に保持するだけではなく、そのすべてを参照しません。新しい端末を開いて何かを実行すると、開いているシェルには追加されません。開いているすべてのシェル(または少なくとも1つの開いているシェル)のメモリに何かを追加するために呼び出すことができるzsh関数がない限り、運が悪い可能性があります。 – Piccolo

+0

@piccolo修正されたZshellをリロードするために 'fc -R'を実行することができましたが、私たちは同じ問題に直面していると思いますよね? –

答えて

1

一つの方法は次のとおりです。

それは次のように特定のコマンドの実行を終了した後fc -Rを呼び出すzshの機能確認します:Rubyで

function rb_yourprogram { 
    ruby /path/to/your/program.rb && fc -R 
} 

を、に追加~/.zsh_historyファイル:

File.open("~/.zsh_history", "a") do |f| 
    f.puts "adds this line to history" 
end 

さて、あなたはzshのにrb_yourprogramを入力して、プログラムを呼び出すことができ、それが電子を終了した後、それを実行すると、履歴ファイルがリロードされ、この新しい履歴の行が追加されます(最初のシェルを開いてから他のzshインスタンスに書き込まれたものに加えて)。

それは常に実行を終了した後fc -Rを呼び出しますように、あなたはまた、zshの中rubyコマンドをオーバーロードすることもできます

function ruby { 
    builtin ruby "[email protected]" && fc -R 
} 
+0

ありがとう、私はここでこれをやろうとしていた:https://gist.github.com/drosenstark/3557dfebd73857cb724a59a33bbbc1ccしかし、このソリューションは - 驚くべきことだ - 私の好みのために少しも賢いです。しかし、選択肢はありません。 –

関連する問題