我已经制作了一个安装脚本,它基本上在 RewriteEngine On 行之后插入一些 RewriteRule ,在shell脚本中使用sed
#!/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和脚本使用相同命令的区别..请指导
答案 0 :(得分:2)
脚本本身很好。您确定上面发布的行是完全从您的脚本中获取它们吗?
错误消息表明您提供了一个空名称作为文件名,因此我建议您添加一个
echo "FILE_PATH: $FILE_PATH"
直接在sed
命令之前,以检查变量是否设置正确。
答案 1 :(得分:1)
您会发现由于使用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
$