繁体   English   中英

在shell脚本中使用sed替代项不起作用

[英]use of sed substitute in shell script doesn't work

我已经制作了一个安装脚本,该脚本基本上通过在shell脚本中使用sedRewriteEngine On行之后插入一些RewriteRule。

#!/bin/bash

REWRITE_RULE="RewriteRule \^catalog\/category\/view\/id\/([0-9]+)$ http:\/\/localhost\/app\/#?c=$1 [NE,L,R=301]"
FILE_PATH=".htaccess"

sed -i "s/RewriteEngine on/RewriteEngine on\n\n$REWRITE_RULE/g" $FILE_PATH

它什么也没做,但给出了一些错误

: 没有相应的文件和目录

我在shell中尝试了相同的命令,但没有任何问题,并更新了.htaccess文件

我是shell脚本的新手,所以不知道通过shell和脚本使用同一命令的区别。

脚本本身很好。 您确定上面发布的行与您从脚本中获取的行完全一样吗?

该错误消息表明您提供了一个空名称作为文件名,因此我建议您将一个

echo "FILE_PATH: $FILE_PATH"

直接在sed命令之前,以检查变量设置是否正确。

您会发现您的脚本包含回车符,这是因为它是用DOS行尾字符保存的。 使用tr -d '\\r' <brokenscript >fixedscript修复脚本。

这是一个复制并修复了该问题的会话的副本:

$ cat file
var=foo

$ cat myscript
sed -i s/foo/bar/ file

$ bash myscript
: No such file or directory

$ shellcheck myscript

In myscript line 1:
sed -i s/foo/bar/ file
                      ^-- SC1017: Literal carriage return. Run script through tr -d '\r' .

$ tr -d '\r' < myscript > fixedscript

$ bash fixedscript

$ cat file
var=bar

$ 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM