条件文は で何の効果もありません。 ./script[閉じる]

条件文は で何の効果もありません。 ./script[閉じる]

履歴ファイル操作スクリプトを作成しようとしています。

たとえば、次を実行してシークレットモードを実装しようとすると

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でなければなりませんelifbash一致するものがないため文句を言いますfi

このスクリプトについて言及したい2つのことがあります。

  1. unsetこれはサブシェルで実行され、望ましくないコマンドの出力を実行します。

    $(unset HISTFILE)
    

    $(...)演算子を削除する必要があります。

  2. これは#!/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. の使用法==をに変えなさい=。この==演算子はこの演算子の非標準エイリアスであり、=これは中断された場合の1つです。
  2. HISTFILESIZE次に名前を変更するSAVEHIST

関連情報