【问题标题】:Command not found error while shell scripting编写 shell 脚本时找不到命令错误
【发布时间】:2013-04-26 16:14:24
【问题描述】:

我正在尝试执行以下程序。

./chExt1.sh cpp test.CPP  

这应该将 test.CPP 重命名为 test.cpp 但我什至不认为这个脚本正在执行。
我一直收到这个“command not found error”。
脚本如下:

#!/bin/sh
newExtension=$1;
oldFile=$2;

        firstPart=`echo $oldFile | sed  's/\(.*\)\..*/\1/'`
    newName="$firstPart.$newExtension";

#echo $oldFile
#echo $newName
mv "$oldFile" "$newName"
#echo "$oldFile"
#echo "$firstPart"
#echo "$newName"

【问题讨论】:

  • 它在 Ubuntu 12.0 上对我有用。你的echo 呢,它们在未注释时是否显示正确的数据?
  • 它在 Fuduntu 2013.2 中工作。您是否安装了sed?您使用的是什么 Linux 操作系统?
  • 你试过 sh chExt1.sh cpp test.CPP 吗?而不是 ./chExt1.sh...
  • 我正在使用 Ubuntu 12.04.1 LTS 我没有尝试在未注释的情况下运行它们,但我会检查一下。
  • 将 -x 添加到您的 #!将脚本执行输出到标准输出的行。 #!/bin/sh -x 它确实有助于排除故障..你可以看到它执行时发生了什么。

标签: linux unix scripting


【解决方案1】:

根据您的评论,在vi 中执行此操作以删除多余的控制字符。我之前在gedit 中编辑文件或在 Windows 中编辑然后在 Unix/Linux 机器上使用时遇到过这个问题。

要删除vi 中所有行末尾的^M 字符,请使用:

:%s/^V^M//g

^vCtrlV 字符,^mCtrlM。当您键入此内容时,它将如下所示:

:%s/^M//g

在 UNIX 中,您可以通过在控制字符前加上 CtrlV 来转义控制字符。 :%s 是 vi 中的基本搜索和替换命令。它告诉vi 将第一个和第二个斜杠之间的正则表达式 (^M) 替换为第二个和第三个斜杠之间的文本(在这种情况下没有)。最后的 g 指示 vi 全局搜索和替换(所有出现)。

Source

【讨论】:

【解决方案2】:

我终于解决了这个问题。当我对包含脚本的文本文件进行 FTP 传输,然后将其传输到 linux 中的 .sh 中时,出现了可怕的错误。我在 emacs 中从头开始写,这一切都清楚了。

【讨论】:

    猜你喜欢
    • 2012-06-28
    • 1970-01-01
    • 2022-08-17
    • 2017-11-10
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 2017-06-02
    相关资源
    最近更新 更多