【问题标题】:Bash read -p doesnt work [duplicate]Bash read -p 不起作用[重复]
【发布时间】:2018-07-21 12:14:35
【问题描述】:

运行我的 shell 脚本时出现此错误:

': not a valid identifiere 17: read: `

这是我的 shell 脚本:

#!/usr/bin/env bash
# Mr. Robot Install Wordpress Script
# Script is used for the following:
# add user to server
# change to new user home directory
# download latest version of wordpress
# unzip wordpress
# move all files up a directory level
# move up a directory level
# delete wordpress.zip
# remove wordpress folder
echo "/*****************************************************/"
echo "/************** HELLO MR. ROBOT **********************/"
echo "/*****************************************************/"
echo ".."
echo ".."
echo "Website URL" 
echo 'url: \r'
read -p $website 
echo 'User: \r' 
read -p $newuser
echo 'Pass: \r'
read -p $password 
echo "creating account......"
/scripts/wwwacct $website $newuser $password 0 x3 n n n  0 0 0 0 0 0
echo "Changing Directory....."
cd ~/home/$newuser/
echo "Getting Latest Version of Wordpress!"
curl -O http://wordpress.org/latest.tar.gz 
echo "Tarball Incoming!!"
tar xvzf latest.tar.gz
echo "removing tar file"
rm latest.tar.gz
echo "moving wordpress folders!"
cp -a ~/home/$newuser/public_html/wordpress/. ~/home/$newuser/public_html/
cd /home/$newuser/public_html/
echo "Part 01 Complete!!"
exit

我尝试使用带有-p 或-e 的不同版本的读取行。任何帮助,将不胜感激。我什至尝试将其添加到带有输入的单独行中。

编辑:将文件更新到需要输入的位置,但问题是脚本的其余部分没有使用输入。从而导致找不到目录的错误。

【问题讨论】:

  • 我猜:脚本没有 shebang 或使用不同的解释器调用,而不是 /bin/bash 或安装了 bash 的任何地方。但是 read 不是该解释器的一部分。你如何调用脚本?它不退出,没有退出语句(最后一行)吗?
  • 我通过命令行运行脚本:/scripts/mr-robot.sh
  • 在继续之前做两件事。首先,在您的脚本上运行dos2unix。其次,添加#!/usr/bin/env bash的shebang。然后开始故障排除。
  • 造成这种情况的直接原因实际上是the StackOverflow bash tag wiki 的“询问有问题的代码之前”部分中的第一件事。 (修复后你会有一个不同的错误——由于不适当的扩展,你的值都被读入REPLY,而不是命名变量,但是......嗯......这是一个不同的错误 i>,还有 shellcheck.net 会捕捉到的东西)。
  • @ZacharyAdams,...顺便说一句,请考虑通过shellcheck.net 运行您的脚本并修复它找到的所有内容。尤其是引用错误,可能会导致不必要的意外。

标签: linux bash shell


【解决方案1】:

不要引用变量名。 read 需要分配变量的 name,而不是它的 value,如果你有美元符号 $,就会得到。

read -p 'website url: ' website 
read -p 'Username: ' newuser
read -p 'Password: ' password 

看起来其中一个变量包含\r,一个回车符。 bash 尝试打印的错误消息类似于:

bash: ./script: line 17: read: `\r': not a valid identifier

但是\r 导致光标回到行首,导致': not a valid identifier 覆盖消息的开头。

【讨论】:

  • so echo 'website url: \r' read -p website
【解决方案2】:

正如上面 John Kugelman 所说,如果您必须检查 Input_file 是否有回车,那么您可以运行以下命令:

cat -v Input_file

如果您找到它们,请尝试从以下任一命令中删除它们:

tr -d '\r' < Input_file
OR
awk '{gsub(/\r/,"")} 1' Input_file

或者检查您的系统(框)是否有 dos2unix 实用程序,您也可以使用它来删除这些回车符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多