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에서 숫자를 얻습니다(파일에는 항상 하나의 숫자만 포함됩니다).

그런 다음 이 숫자를 증가시켜 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 [이메일 보호됨]:/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"

대체 구현(여전히 구체적이지만 이를 방지 하고 사용자로부터 읽은 값이 실제로 숫자/십진 정수인지 확인하므로 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"

관련 정보