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"