Linux 在shell脚本中使用sed替换并不';行不通
我制作了一个安装脚本,基本上是在shell脚本中使用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
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中也能正常工作,当我