FreeBSDで「read -i」をどのように使用しますか? (ユーザー入力であらかじめ埋められている)

FreeBSDで「read -i」をどのように使用しますか? (ユーザー入力であらかじめ埋められている)

CentOsでbashスクリプトを作成しましたが、FreeBSDのスクリプトに問題があります。

だから質問は「読む「Linuxの関数の合計」読む「機能。


これは私のスクリプトの一部です。

Tmp="an_num.tmp"
Tmpg=$(cat $Tmp)
Tmpi=$(expr $Tmpg + 1)
printf "${WONWARN} Please enter a number ${NORMAL} %s"
read -i "$Tmpi" -e Number; echo
echo "$Number" > "$Tmp"

ここではan_num.tmpから数字を取得します(ファイルには常に1つの数字のみが含まれます)。

その後、この数を増やしてTmpi変数に入れます。

その後、プリフィル(Tmpi変数のプリフィル)を持つ読み取り機能を使用して、ユーザーは新しい値を入力するか、この増分値を受け入れることができます。


男性は読むCentOSでは:

-i text readline を使用して行テキストを読み取る場合は、編集が開始される前に編集バッファに入れます。

しかし、」読むFreeBSDにはそれに対応するものはありません-私キー。

FreeBSDオペレーティングシステムでプリフィルを使用する方法は?ありがとうございます。


$ uname -a FreeBSD srv 11.0-RELEASE-p1 FreeBSD 11.0-RELEASE-p1 #0 r306420: 2016年9月29日木曜日 01:43:23 UTC [Eメール保護]:/usr/obj/usr/src/sys/GENERIC amd64

答え1

スクリプトが両方のシステムで実行されている場合は問題ありませんbash(少なくともインストールされている両方のシェルバージョンがread -iスクリプトが使用できる他の特定の機能をサポートしている場合は問題ありません)。bash

スクリプトに各システムの実行可能ファイルを#!指す正しい -line があることを確認してください。bash


コードに関する注意事項:

Tmp="an_num.tmp"
Tmpg=$(cat $Tmp)       # may be replaced with Tmpg=$(<"$Tmp")
Tmpi=$(expr $Tmpg + 1) # may be replaced with Tmpi=$(( Tmpg + 1 ))

printf "${WONWARN} Please enter a number ${NORMAL} %s"
# The above lacks a value for the %s format string

read -i "$Tmpi" -e Number; echo
echo "$Number" > "$Tmp"

代替実装(まだ具体的ですがこれを防ぎ、ユーザーから読み取られた値が実際に数値/10進整数であることを確認するので、bash以前のバージョンで動作します):read -i

tmp_fname="an_num.tmp"

read num <"$tmp_fname"
num=$(( num + 1 ))

read -p 'Enter number: '

if [[ -n "$REPLY" ]] && [[ "$REPLY" =~ ^[0-9]*$ ]]; then
    num=$REPLY
fi

echo "$num" >"$tmp_fname"

関連情報