GNU/Linux >> Linux の 問題 >  >> Ubuntu

このスクリプトでコマンド履歴の一部を削除しないのはなぜですか?

スクリプトはここにあります:https://stackoverflow.com/questions/14750650/how-to-delete-history-of-last-10-commands-in-shell

便宜上、ここにあります:

for x in `seq $1 $2`
do
  history -d $1
done

これをインクルードディレクトリ(PATHに追加したディレクトリ)に置き、ここで作成した他の多くのスクリプトを実行して、問題なく動作します。

これは、履歴から行を削除するという望ましい結果を生み出しません。実際、何もしません。

履歴コマンドが機能しない理由はありますか?ディレクトリと関係があるのだろうか。

追加情報:

コードをいじって、さまざまなバリエーションを試しました。 echoを入れたら historyの前 コマンドを実行して実行すると、次の出力が得られます:

[email protected]:~$ idelhistory 300 305
history -d 300
history -d 301
history -d 302
history -d 303
history -d 304
history -d 305
[email protected]:~$ 

だから、私には、それは完全に機能するはずのようです。理由がわかりません。このスクリプトは/$HOME / Scripts /から実行されており、PATHに含まれています。また、sudoを使用して実行してみましたが、何も変更されていません。

承認された回答:

一言で言えば、正しく呼んでいないため、機能しません。

まず、スクリプトが#!/bin/bashで始まっていないためです。 、実際にはbashスクリプトではありません。どのシェルで実行されるかは、どのように呼び出すかによって異なります。 bashコマンドラインから呼び出すと、bashはそれ自体の新しいインスタンスをフォークし(これはとにかく外部コマンドを実行するために発生する必要があります)、スクリプトを実行するのはこの新しいインスタンスです。したがって、スクリプトは親シェルと同じ設定(これまでの履歴を含む)で実行されます。さまざまなオプションで実行されます。特に、スクリプト内のコマンドの履歴追跡はオフになっています(これは、変更する履歴に追加されるため、適切です)。

スクリプトを実行しているbashインスタンスにHISTFILEがあるかどうか 変数セットは、親にエクスポートされたかどうかによって異なります(これは少し奇妙です)。エクスポートされていないために子に設定されていない場合、子スクリプトは終了時に変更された履歴を保存しません。

HISTFILEの場合 がエクスポートされると、子スクリプトが履歴ファイルを変更します。ただし、すべてのコマンドの後に履歴を再読み込みするようにインタラクティブシェルを構成していない限り、変更された履歴は、新しく開始されたbashのインスタンスによってのみ取得されます。

関連:UEFIとLUKSを使用したデュアルブート–何を知って/行う必要がありますか?

現在のシェルインスタンスに影響を与えるシェルスニペットを実行する場合は、サブプロセスとして実行するのではなく、現在のシェルインスタンスでそのシェルを実行する必要があります 。ディレクトリの変更や変数の設定など、シェルプロセス自体に影響を与える他のことを実行したい場合も、同様の問題が発生します。. (「ドット」)またはsource 現在のシェルプロセスでスクリプトを実行するための組み込み。

. idelhistory 300 365

または、これを.bashrcの関数として定義することもできます。 。


Ubuntu
  1. Ubuntu 20.04で端末履歴を表示および削除する-最良の方法は?

  2. 次のコマンドがシステムを強制終了するのはなぜですか?

  3. Firefox8.0がUpdateManagerのアップデートとして利用できないのはなぜですか?

  1. Linuxでhistoryコマンドを使用する方法

  2. モニターのネイティブ解像度がオプションとして表示されないのはなぜですか?

  3. スクリプト内でユーザーを変更すると、Suを実行しているこのスクリプトが終了しないように見えるのはなぜですか?

  1. Ubuntu –起動/ログイン時にXmodmapコマンドが実行されないのはなぜですか?

  2. Bashの感嘆符(!)を理解していますか?

  3. コマンド履歴に最初の75行が欠落しているようですか?