私はRubyでスクリプトを作成しており、Rubyスクリプトを呼び出すZshellの履歴にコマンドを挿入します。私はこれを試みましたが、それは呼び出すZshellにアクセスできない(私は思います)RubyスクリプトからZsh履歴にコマンドを追加
#!/usr/bin/env ruby
`zsh -c print -s what`
ヒント?次のようにあなたがこれをやって行くことができる
私はRubyでスクリプトを作成しており、Rubyスクリプトを呼び出すZshellの履歴にコマンドを挿入します。私はこれを試みましたが、それは呼び出すZshellにアクセスできない(私は思います)RubyスクリプトからZsh履歴にコマンドを追加
#!/usr/bin/env ruby
`zsh -c print -s what`
ヒント?次のようにあなたがこれをやって行くことができる
一つの方法は次のとおりです。
それは次のように特定のコマンドの実行を終了した後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
}
ありがとう、私はここでこれをやろうとしていた:https://gist.github.com/drosenstark/3557dfebd73857cb724a59a33bbbc1ccしかし、このソリューションは - 驚くべきことだ - 私の好みのために少しも賢いです。しかし、選択肢はありません。 –
子プロセスは親の環境を変更することはできません(例えばhttps://stackoverflow.comを見ます/ a/263022/2088135) –
'.zsh_history'ファイルがありますが、起動時にのみロードされるため、これが可能かどうかはわかりません。現在のシェルはその履歴をメモリ内に保持するだけではなく、そのすべてを参照しません。新しい端末を開いて何かを実行すると、開いているシェルには追加されません。開いているすべてのシェル(または少なくとも1つの開いているシェル)のメモリに何かを追加するために呼び出すことができるzsh関数がない限り、運が悪い可能性があります。 – Piccolo
@piccolo修正されたZshellをリロードするために 'fc -R'を実行することができましたが、私たちは同じ問題に直面していると思いますよね? –