これを行う方法をGoogleで検索するときに見つけることができるのは、履歴を保存せずにセッションを終了する方法(例)kill -9 $$
だけでしたが、正反対の問題に直面しました。コマンド以外のすべての履歴を保存したいですexit
。
Comcastは、パイプを損傷することなくSSHトンネルを5分以上維持できないほど職場で私たちを虐待しました。再接続した後、最後のコマンドを実行に行きましたが、当然今は忘れてしまいましたexit
!
ベストアンサー1
シェルは、停止を求めるコマンドを受け取るまで(コマンドを入力してexit
)、またはファイルの終わり(EOF)が発生するまで(シェルがスクリプトを実行したときと同じように)、端末(つまりシェルの標準入力)からコマンドを読み取ります。
コマンドが入力されると、exit
最初に履歴に保存され、次にシェルが終了します。入力ctrl- DEOFを生成します。これはコマンドではなく入力状態なので、シェル履歴に保存することはできません。
bash
EOFを無視するように指示する方法は2つあります。
- -o 無視設定
- EOFを無視=
n
最初の方法は実行と同じです。つまり、シェルが終了する前に-10を連続してIGNOREEOF=10
押す必要があります。これは、たとえばミスなどをした場合にシェルが予期せず終了するのを防ぐためです。ctrlDctrlC
また、ctrl-は行の最初の項目として入力された場合にのみ生成されます(つまり、入力後)。Dその行にすでに入力されている内容がある場合は無視されます。EOF
bash
ctrl-Dシェルの外部でも作成されます。EOF
たとえば、
$ wc
foo bar
<ctrl-D>
1 2 8
wc
1行、2単語、8文字(改行を含む)として計算されます。
以下は、行にいくつかの入力を提供した後に - を使用する例ですctrl。D
$ wc
foo bar<ctrl-D><ctrl-D> 0 2 7
これでwc
、0行(enter
提供されていません)、2単語、7文字が計算されました。データがすでに提供されているため、2つのctrl順序が必要です。たとえば、データがこの行に入力されたかどうかを無視し、それを具体的に処理することに注意してください。これは 。Dbash
EOF
dash
bash