Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/scheme/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在shell脚本中使用sed替换并不';行不通_Linux_Bash_.htaccess_Shell_Sed - Fatal编程技术网

Linux 在shell脚本中使用sed替换并不';行不通

Linux 在shell脚本中使用sed替换并不';行不通,linux,bash,.htaccess,shell,sed,Linux,Bash,.htaccess,Shell,Sed,我制作了一个安装脚本,基本上是在shell脚本中使用sed在RewriteEngine之后插入一些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

我制作了一个安装脚本,基本上是在shell脚本中使用
sed
RewriteEngine之后插入一些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
命令之前执行,以检查变量设置是否正确。

脚本本身正常。你确定上面发布的行与你从脚本中获取的行完全一致吗

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

echo "FILE_PATH: $FILE_PATH"

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

脚本本身正常。你确定上面发布的行与你从脚本中获取的行完全一致吗

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

echo "FILE_PATH: $FILE_PATH"

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

脚本本身正常。你确定上面发布的行与你从脚本中获取的行完全一致吗

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

echo "FILE_PATH: $FILE_PATH"

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

您会发现,由于使用DOS行尾字符保存,您的脚本包含回车符。使用
tr-d'\r“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

$ 
$cat文件
var=foo
$cat myscript
sed-i s/foo/bar/file
$bash myscript
:没有这样的文件或目录
$shellcheck myscript
在myscript第1行中:
sed-i s/foo/bar/file
^--SC1017:文本回车。通过tr-d'\r'运行脚本。
$tr-d'\r'fixedscript
$bash fixedscript
$cat文件
var=巴
$ 

您会发现,由于使用DOS行尾字符保存,脚本包含回车符。使用
tr-d'\r“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

$ 
$cat文件
var=foo
$cat myscript
sed-i s/foo/bar/file
$bash myscript
:没有这样的文件或目录
$shellcheck myscript
在myscript第1行中:
sed-i s/foo/bar/file
^--SC1017:文本回车。通过tr-d'\r'运行脚本。
$tr-d'\r'fixedscript
$bash fixedscript
$cat文件
var=巴
$ 

您会发现,由于使用DOS行尾字符保存,脚本包含回车符。使用
tr-d'\r“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

$ 
$cat文件
var=foo
$cat myscript
sed-i s/foo/bar/file
$bash myscript
:没有这样的文件或目录
$shellcheck myscript
在myscript第1行中:
sed-i s/foo/bar/file
^--SC1017:文本回车。通过tr-d'\r'运行脚本。
$tr-d'\r'fixedscript
$bash fixedscript
$cat文件
var=巴
$ 

您会发现,由于使用DOS行尾字符保存,脚本包含回车符。使用
tr-d'\r“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

$ 
$cat文件
var=foo
$cat myscript
sed-i s/foo/bar/file
$bash myscript
:没有这样的文件或目录
$shellcheck myscript
在myscript第1行中:
sed-i s/foo/bar/file
^--SC1017:文本回车。通过tr-d'\r'运行脚本。
$tr-d'\r'fixedscript
$bash fixedscript
$cat文件
var=巴
$ 

.htaccess
是一个相关的路径,您需要绝对路径。为了快速响应,我在shell中使用了AbsolutePath@Babbleshack,事实上,当我为另一个脚本(用于
cp
的脚本)使用相对路径时,它也可以正常工作。对不起,我的专业知识xD以上,但是我相信如果你从更高的目录调用脚本,那么它们的目标目录,脚本就会工作。如果目标不在脚本的任何子目录中,则脚本将找不到其目标。我可能是错的。
.htaccess
是一个相关的路径,你需要绝对路径。为了你的快速响应,我给Hanks@Babbleshack打了个招呼,实际上它在shell中也可以正常工作,当我为另一个脚本使用相对路径时,
cp
它工作得很完美。对不起,这超出了我的专业知识xD,但是我相信如果你从更高的目录调用脚本,那么它们的目标目录,脚本就会工作。如果目标不在脚本的任何子目录中,则脚本将找不到其目标。我可能是错的。
.htaccess
是一个相关的路径,你需要绝对路径。为了你的快速响应,我给Hanks@Babbleshack打了个招呼,实际上它在shell中也可以正常工作,当我为另一个脚本使用相对路径时,
cp
它工作得很完美。对不起,这超出了我的专业知识xD,但是我相信如果你从更高的目录调用脚本,那么它们的目标目录,脚本就会工作。如果目标不在脚本的任何子目录中,则脚本将找不到其目标。不过我可能错了。
.htaccess
是一个相关的路径,你需要绝对路径。为了让你快速响应,我给Hanks@Babbleshack打了个招呼,实际上它在shell中也能正常工作,当我