Linux Bash脚本打印“;“未找到命令”;空行

Linux Bash脚本打印“;“未找到命令”;空行,linux,bash,debian,Linux,Bash,Debian,每次从Debian中的命令行使用bash scriptname.sh运行脚本时,我都会得到command Not found,然后是脚本的结果 脚本可以工作,但对于每一个空行,屏幕上都会打印一条命令notfound语句。每个空行都会导致找不到命令 我正在从/var文件夹运行脚本 以下是脚本: #!/bin/bash echo Hello World 我通过键入以下命令来运行它: bash testscript.sh 为什么会出现这种情况?您可以使用bash-x scriptname.sh来

每次从Debian中的命令行使用
bash scriptname.sh
运行脚本时,我都会得到
command Not found
,然后是脚本的结果

脚本可以工作,但对于每一个空行,屏幕上都会打印一条
命令notfound
语句。每个空行都会导致找不到命令

我正在从
/var
文件夹运行脚本

以下是脚本:

#!/bin/bash

echo Hello World
我通过键入以下命令来运行它:

bash testscript.sh

为什么会出现这种情况?

您可以使用
bash-x scriptname.sh
来跟踪它。

确保第一行是:

#!/bin/bash
如果bash不是
/bin/bash


尝试运行:

dos2unix script.sh
将行尾等从Windows格式转换为unix格式。i、 e.它从行结束处剥离\r(CR)以将它们从
\r\n(CR+LF)
更改为
\n(LF)


判断文件是否为dos/Win格式的另一种方法:

cat scriptname.sh | sed 's/\r/<CR>/'
cat scriptname.sh | sed's/\r/'
输出将如下所示:

#!/bin/sh<CR>
<CR>
echo Hello World<CR>
<CR>
#/垃圾箱/垃圾箱
回声你好世界

这将输出整个文件文本,并为文件中的每个
\r
字符显示

如果脚本工作(相对)良好,则运行正常。您的问题可能是文件中的一行引用的程序不在路径上、未安装、拼写错误或类似的内容

一种方法是在脚本顶部放置一个
set-x
,或者用
bash-x
运行它,而不是只运行
bash
——这将在执行它们之前输出行,您通常只需要在错误发生之前查看命令输出,就可以知道是什么导致了问题

如你所说,这是导致问题的空行,你可能想检查它们中的内容。运行:

od -xcb testscript.sh

并确保使用Windows类型编辑器时不会出现“看不见”的有趣字符,如CTRL-M(回车符)。在脚本文件上使用
dos2unix

我也遇到了类似的问题。问题似乎是权限问题。如果执行
ls-l
,则可以确定文件的执行位可能未打开。这将不允许执行脚本。:)

正如@artooro在评论中添加的:


要解决该问题,请运行
chmod+x testscript.sh


我还有一些
无法执行的命令
。一切看起来都是正确的,但事实上,就在我发出命令之前,我有一个不可破坏的空间,这当然是肉眼无法发现的:

if [[ "true" ]]; then
  &nbsp;highlight --syntax js "var i = 0;"
fi
在Vim中,它看起来像:

if [[ "true" ]]; then
  highlight --syntax js "var i = 0;"
fi

只有在运行Bash脚本检查器之后,我才发现问题。

尝试
chmod u+x testscript.sh

我从这里知道:

要执行该命令,必须提供该命令的完整路径 比如说

/home/Manuel/mywrittenscript

我也有同样的问题。不幸的是

dos2unix winfile.sh
bash: dos2unix: command not found
所以我这样做是为了改变信仰

 awk '{ sub("\r$", ""); print }' winfile.sh > unixfile.sh
然后

bash unixfile.sh

运行脚本的问题也可能与多行命令的格式错误有关,例如,如果在换行符“\”之后有一个空格字符。例如,这:

./run_me.sh \ 
--with-some parameter

(请注意“\”)后面的多余空间会导致问题,但当您删除该空间时,它将运行得非常正常。

如果您有记事本+,并且您收到此.sh错误消息:“找不到命令” 或此自动确认错误消息“第615行: ../../autoconf/bin/autom4te:没有这样的文件或目录“

在记事本++上,进入编辑->下线转换,然后选中Macinthos(CR)。 这将编辑您的文件。我还鼓励使用此命令检查所有文件,
因为这样的错误很快就会发生。

这可能是微不足道的,与OP的问题无关,但我在学习脚本编写的一开始经常犯错误

VAR_NAME = $(hostname)
echo "the hostname is ${VAR_NAME}"  
这将产生“未找到命令”响应。正确的方法是消除空格

VAR_NAME=$(hostname)

在Bash for Windows上,我尝试错误地运行

run_me.sh 
开始时没有./并且得到了相同的错误

对于具有Windows背景的用户,正确的表单看起来是多余的:

./run_me.sh
将当前目录(.)添加到路径,以便能够执行驻留在当前目录中的脚本,只需键入其名称:

PATH=.:$PATH

我今天遇到了这个问题,心不在焉地将dollar命令提示符
$
(在命令字符串之前)复制到脚本中。

您可能需要使用别名更新.bashrc和.bash_配置文件,以识别您输入的命令


.bashrc和.bash_配置文件是隐藏文件,可能位于保存程序文件的C:驱动器上。

这可能不是必需的,因为他直接使用
bash scriptname.sh运行它(当然,这仍然是一个很好的做法)。嗨#/bin/bash是我的第一行代码script@chown-我在Mac上也有同样的问题。我偶然发现了这篇文章。我不确定这是否有助于行动。但是你的解决方案帮助了我。谢谢。这正是我面临的问题。这个答案让它起作用了。你怎么能在开车时写下编程问题的答案?+1表示“od”命令!太酷了,我不知道!谢谢要解决此问题,请运行
chmod+x testscript.sh
这是对我有效的答案,总是被告知我没有权限,因此我使用了它,并被告知找不到命令。我不想检查权限。谢谢Lypso345,这解决了我遇到的问题。chmod 777 testscript.sh ftw这是我的答案。谢谢。事实上,shell根本不关心文件扩展名。当然,在linux文件系统中,与windows扩展相反的是,它只是作为名称的一部分使用,没有提到fil