2011-11-14 11 views
4

私はLinuxには比較的新しく、lean bash、ひいてはzshに挑戦しようとしています。とにかく、これは私が困惑している瞬間です:スクリプト内の 'history -s'は機能しません。

#!/bin/bash 
history -s "a_string" 

....は動作しません。私はアイデアにダースのバリエーションを試しましたが、何もそれをカットしません。 アイデア

+0

何をしたいですか? –

答えて

2

サブシェルはインタラクティブではないため、履歴を保存しません。または親シェルは履歴をリロードしません。この周り

典型的方法:

  1. 代わりスクリプト

    alias doit='history -s "a_string"' 
        unalias doit 
    
  2. 代わりスクリプト

    function doit() { 
         echo "A function is a lot like a script" 
         history -s "but operates in a subshell only when a bash command does (piping)" 
        } 
        unset doit 
    
  3. sourceスクリプトのシェル関数を使用エイリアスを使用して、サブシェルで実行する代わりに

    source ./myscript.sh 
    . ./myscript.sh # equivalent shorthand for source 
    
+0

ありがとうございます。それで私はこの問題についていくつかの洞察を得ています。 –

+1

さて、上記のすべてを試してみましたが、それらはすべて機能しますが、私にとって最も有用なのはスクリプトではなく関数を使うことです。私はこの2つの違いを初めて理解したと思います。 –

+0

乾杯。私は書式を修正しました。あなたは実際に私が今意図したものを読むことができるかもしれません:) – sehe

1

$HISTFILE$HISTFILESIZEこのようなスクリプトを実行しているときに設定されていません。 $HISTFILEを設定すると、好きなように履歴を読み書きすることができます。

+0

と親シェルは、スクリプトが終了した後に_from_そのファイルの履歴を更新しますか? – sehe

+0

bashは、起動時に自動的に履歴をロードし、適切な終了時に保存します。それ以外には歴史があります。 –

+0

'history -s'が実行されたときに_still_が動作しないように見えるでしょうスクリプトの中で?スクリプトがソースになっていない限り、呼び出し元のシェルセッションに影響はありませんか? – sehe

関連する問題