Unixで1つのファイルから2つの異なる結果を取得するには?

Unixで1つのファイルから2つの異なる結果を取得するには?

それで部屋に入ったときに二つの反応が出るダンジョンを作ろうとするのに、できるのはこれだけです。 1つのファイルから2つの異なる結果を得る方法は?

だから、最初にファイルを開くときに特定のコンテンツを表示したいと思います。ただし、両方のコンテンツは同じファイルにあります。最初の訪問で1つのコンテンツを読んで、再訪問時に2番目のコンテンツを読んでください。

2つの別々の出力を1つのファイルに出力できますか?たとえば、以下のファイルを最初に実行すると「sup sep」応答が返され、2回目の実行では「no no」応答が返されます。これは単なる例ですが、これが私が達成したいものです。それでは、これを正確にどのように管理する必要がありますか?

this=1
if [ "$this"=="1" ]; then
echo "sup sup"
let "this=$this - 1"
fi
if [ "$this"=="0" ]; then
echo "no no"
fi

答え1

Bashスクリプトでこの変数を使用すると、呼び出す$RANDOMたびに異なる結果が得られます。整数(0-32767)を返しますが、数値が偶数であるか奇数であるかをテストし、[はい]または[いいえ]に設定できます。

$ echo $RANDOM
2104

$ echo $RANDOM
25188

偶数/奇数例

$ if (( RANDOM % 2 )); then echo even; else echo odd; fi
even
$ if (( RANDOM % 2 )); then echo even; else echo odd; fi
even
$ if (( RANDOM % 2 )); then echo even; else echo odd; fi
odd

上記のコードは、モジュール分割演算子を使用して現在の$RANDOM数字を2で除算します。$RANDOM偶数の場合は「偶数」メッセージをエコーし​​、それ以外の場合は「奇数」メッセージをエコーし​​ます。

これは、スクリプトで使用可能な「はい」または「いいえ」オプションで変更できます。

引用する

答え2

ファイル内の内容がどのように配置されているかによって異なりますが、スクリプトでファイルが開いているかどうかを追跡するだけです。

# Example where the first time opening, line 1 is printed, and subsequent times
# line 2 is printed
file_opened=0
# ... code
if [ $file_opened -eq 0 ]; then
    # code for first time opening, e.g.:
    head -1 the_file.txt # Prints line 1
    file_opened=1
else
    # code for subsequent times, e.g.:
    sed -n '2{p;q}' the_file.txt # Prints line 2
 fi

関連情報