我遇到错误,我将代码应该正常工作到shell文件中,当我运行它时,它无法正常运行。我从这里收到的错误让我感到困惑。这就是我所拥有的:
echo "Please enter your student ID: "
read username
echo "Please enter your MySQL password: "
read -s password
db="db$username"
echo "DB username is $db"
$(mysql -D$db -u$username -p$password -se "CREATE TABLE...")
echo "That has been completed"
SQL命令已被截断,因为它似乎与错误无关。
如果我通过putty运行此代码,我会得到:
*******@csl-*******:~/tasks/SQL$ ./generate.sh
Please enter your student ID:
': not a valid identifierad: `username
Please enter your MySQL password:
': not a valid identifierad: `password
DB username is db
ERROR 1045 (28000): Access denied for user '-p'@'localhost' (using password: NO)
./generate.sh: line 7: $'\r': command not found
That has been completed
*******@csl-*******:~/tasks/SQL$
(*表示隐藏值)
我不确定这段代码的错误是什么。我已经尝试过在不同的情况下,例如使用Mac创建具有完全相同文件的文件并通过终端运行它并且它工作正常(在同一个Linux服务器上)。然而,我也回到同一台Mac尝试重新运行代码并得到与此处所示相同的错误 - 即使代码没有改变。
一些背景资料: 使用Putty进行SSH访问,使用Filezilla进行FTP,使用Sublime Text进行代码编辑。连接到远程Linux服务器以从中运行。
答案 0 :(得分:0)
我认为这是由于错误的行结束字符,如果你在windows中运行sublime就是这种情况。
尝试运行od -xcb
以查找回车符。 Unix只需要\n
,而你会看到\r\n
带有回车符。
您可以通过运行dos2unix generate.sh
来修复您的文件。
根据下面的Dannys评论,您可以转到 view>更改sublime中的设置行结尾> UNIX
<强>示例:强>
我复制了你的脚本并使用带有名为script.sh
的unix回车的vim创建了一个文件。然后我使用unix2dos
创建一个带有回车符的文件进行测试,并且能够重新创建错误。
Unix回车:
od -xcb script.sh
0000000 2123 622f 6e69 622f 7361 0a68 6365 6f68
# ! / b i n / b a s h \n e c h o
Windows回车:
od -xcb windows.sh
0000000 2123 622f 6e69 622f 7361 0d68 650a 6863
# ! / b i n / b a s h \r \n e c h
来自windows脚本的错误:
> . windows.sh
Please enter your student ID:
': not a valid identifier
Please enter your MySQL password:
': not a valid identifier
DB username is db12
That has been completed