履歴ファイル操作スクリプトを作成しようとしています。
たとえば、次を実行してシークレットモードを実装しようとすると
unset HISTFILE
コマンドは新しいシェルで実行されるため、何の効果もありません。私が試したとき
. ./script
コマンドは機能しますが、スクリプトに渡されたパラメーターを処理するために使用される条件により、構文エラーが発生します。
解決策はありますか?
解決済み:問題は、無効な条件付き使用とzshスクリプトの非互換性でした。
case $1 in
(set)
HISTFILE=$2
HISTFILESIZE=$3
;;
(incognito)
unset HISTFILE
;;
(removesizelimit)
HISTSIZE=-1
HISTFILESIZE=-1
;;
(clear)
rm -f $HISTFILE
unset HISTFILE && exit
;;
(backup)
tar -cf HISTFILE.tar $HISTFILE
;;
("")
echo "Usage:"
echo " . ./history <option>"
echo " . ./history set <HISTSIZE> <HISTFILESIZE>"
echo
echo "Manipulate history file"
echo
echo "Options:"
echo -e " incognito\t\t\tdo not record history of commands in this session"
echo -e " removesizelimit\t\tremove limitation of size of history file"
echo -e " clear\t\t\t\tclear history of run commands"
echo -e " backup\t\t\t\tclear create a backup of history file in archive"
;;
(*)
echo "ERROR: Option unrecognized"
echo
echo "run . ./history for help"
esac
答え1
この回答の多くは、質問が編集される前にもっと意味がありました。 :)
エラーは簡単です。
if [ "$1" == "proto" ]; then
TESTVAR=
if [ "$1" == "set" ]; then
HISTFILE=$2
HISTFILESIZE=$3
elif [ "$1" == "incognito" ]; then
# ....
ここで2番目はif
でなければなりませんelif
。bash
一致するものがないため文句を言いますfi
。
このスクリプトについて言及したい2つのことがあります。
unset
これはサブシェルで実行され、望ましくないコマンドの出力を実行します。$(unset HISTFILE)
$(...)
演算子を削除する必要があります。これは
#!/bin/bash
、スクリプトがバイナリの引数として独立して実行できることを意味します/bin/bash
。これはこのようなスクリプトには適していないため、実行しないことをお勧めします(実行権限を設定しないことをお勧めします)。
最後の一つ。入れ子になった if/else によるパラメータ解析は少し不器用です。次の文を使用できますcase
。
case $1 in
(proto) TESTVAR= ;;
(set)
HISTFILE=$2
HISTFILESIZE=$3
;;
#...etc...
("")
# ... put your usage here...
;;
(*)
echo >&2 "ERROR: Option unrecognized"
echo >&2
echo >&2 "run . ./history.bash for help"
;;
esac
zshでスクリプトが機能するように設定します。
- の使用法
==
をに変えなさい=
。この==
演算子はこの演算子の非標準エイリアスであり、=
これは中断された場合の1つです。 HISTFILESIZE
次に名前を変更するSAVEHIST