为什么这个脚本会创建一个重复文件并在末尾添加“-e”?
Why is this script creating a duplicate file and adding `-e` to the end?
我首先要说的是,我不确定它应该在这里还是超级用户,所以如果我需要删除请告诉我。
我正在 ~./bash_profile
中创建一个函数来帮助我启动新的 Laravel 项目。这是脚本:
function bootlaravel {
PROJECT=
echo "Magically creating a new Laravel project: $PROJECT..."
cd /Applications/MAMP/htdocs
laravel new $PROJECT
cd $PROJECT
git init
git add .
git commit -m "Install Laravel"
sed -i -e "s/DB_DATABASE=homestead/DB_DATABASE=$PROJECT/g" .env
sed -i -e "s/DB_USERNAME=homestead/DB_USERNAME=root/g" .env
sed -i -e "s/DB_PASSWORD=secret/DB_PASSWORD=/g" .env
/Applications/MAMP/Library/bin/mysql --host=localhost -uroot -proot -e "create database $PROJECT DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci"
open "http://$PROJECT.dev"
pstorm .
echo "Project: $PROJECT has been created. Have fun!"
}
用法类似于bootlaravel LaravelProjectName
在使用 sed
命令修改 .env
文件的地方,它实际上是在创建一个 .env-e
文件作为现有 .env
文件的同级文件。我真的不明白为什么要这样做。不过,它会根据需要更改单词。
感谢任何帮助
我通常建议完全不要使用 sed -i
,尤其是在尝试或在平台之间移动脚本时。 BSD sed
(例如在 OS X 上) 需要 一个 -i
的参数,这可能也是你得到 [=15] 的原因=] 后缀( 绝对 为什么 -ie
给你一个 e
后缀,即使是 GNU sed
)。
您对 sed
的三个调用可以合并:
sed -e 's/DB_DATABASE=homestead/DB_DATABASE='"$PROJECT"'/g' \
-e 's/DB_USERNAME=homestead/DB_USERNAME=root/g' \
-e 's/DB_PASSWORD=secret/DB_PASSWORD=/g' .env >.env-new &&
mv -f .env-new .env
在我看来,使用临时文件是为可移植性和健壮性付出的小代价。
此外,引用所有用户提供的字符串。在你的情况下,$PROJECT
和 </code>,你有一个很好的 SQL 注入可能性,否则,例如。</p>
<p>如果我的 SQL 引用正确,这将是修改后的 shell 函数:</p>
<pre><code>function bootlaravel {
local project=""
echo "Magically creating a new Laravel project: $project..."
cd /Applications/MAMP/htdocs || return 1
laravel new "$project"
cd "$project" || return 1
git init
git add .
git commit -m "Install Laravel"
sed -e 's/DB_DATABASE=homestead/DB_DATABASE='"$project"'/g' \
-e 's/DB_USERNAME=homestead/DB_USERNAME=root/g' \
-e 's/DB_PASSWORD=secret/DB_PASSWORD=/g' .env >.env-new &&
mv -f .env-new .env
/Applications/MAMP/Library/bin/mysql \
--host=localhost -uroot -proot <<SQL_END
CREATE DATABASE \`$project\`
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci
SQL_END
open "http://$project.dev"
pstorm .
echo "Project: $project has been created. Have fun!"
}
这也使用小写字母 $project
(大写字母通常用于环境变量),如果任何 cd
失败,return 将成为非零状态。我还将 project
声明为函数中的局部变量,以免用新的 shell 变量污染调用 shell。空行等主要是为了便于阅读。
我首先要说的是,我不确定它应该在这里还是超级用户,所以如果我需要删除请告诉我。
我正在 ~./bash_profile
中创建一个函数来帮助我启动新的 Laravel 项目。这是脚本:
function bootlaravel {
PROJECT=
echo "Magically creating a new Laravel project: $PROJECT..."
cd /Applications/MAMP/htdocs
laravel new $PROJECT
cd $PROJECT
git init
git add .
git commit -m "Install Laravel"
sed -i -e "s/DB_DATABASE=homestead/DB_DATABASE=$PROJECT/g" .env
sed -i -e "s/DB_USERNAME=homestead/DB_USERNAME=root/g" .env
sed -i -e "s/DB_PASSWORD=secret/DB_PASSWORD=/g" .env
/Applications/MAMP/Library/bin/mysql --host=localhost -uroot -proot -e "create database $PROJECT DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci"
open "http://$PROJECT.dev"
pstorm .
echo "Project: $PROJECT has been created. Have fun!"
}
用法类似于bootlaravel LaravelProjectName
在使用 sed
命令修改 .env
文件的地方,它实际上是在创建一个 .env-e
文件作为现有 .env
文件的同级文件。我真的不明白为什么要这样做。不过,它会根据需要更改单词。
感谢任何帮助
我通常建议完全不要使用 sed -i
,尤其是在尝试或在平台之间移动脚本时。 BSD sed
(例如在 OS X 上) 需要 一个 -i
的参数,这可能也是你得到 [=15] 的原因=] 后缀( 绝对 为什么 -ie
给你一个 e
后缀,即使是 GNU sed
)。
您对 sed
的三个调用可以合并:
sed -e 's/DB_DATABASE=homestead/DB_DATABASE='"$PROJECT"'/g' \
-e 's/DB_USERNAME=homestead/DB_USERNAME=root/g' \
-e 's/DB_PASSWORD=secret/DB_PASSWORD=/g' .env >.env-new &&
mv -f .env-new .env
在我看来,使用临时文件是为可移植性和健壮性付出的小代价。
此外,引用所有用户提供的字符串。在你的情况下,$PROJECT
和 </code>,你有一个很好的 SQL 注入可能性,否则,例如。</p>
<p>如果我的 SQL 引用正确,这将是修改后的 shell 函数:</p>
<pre><code>function bootlaravel {
local project=""
echo "Magically creating a new Laravel project: $project..."
cd /Applications/MAMP/htdocs || return 1
laravel new "$project"
cd "$project" || return 1
git init
git add .
git commit -m "Install Laravel"
sed -e 's/DB_DATABASE=homestead/DB_DATABASE='"$project"'/g' \
-e 's/DB_USERNAME=homestead/DB_USERNAME=root/g' \
-e 's/DB_PASSWORD=secret/DB_PASSWORD=/g' .env >.env-new &&
mv -f .env-new .env
/Applications/MAMP/Library/bin/mysql \
--host=localhost -uroot -proot <<SQL_END
CREATE DATABASE \`$project\`
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci
SQL_END
open "http://$project.dev"
pstorm .
echo "Project: $project has been created. Have fun!"
}
这也使用小写字母 $project
(大写字母通常用于环境变量),如果任何 cd
失败,return 将成为非零状态。我还将 project
声明为函数中的局部变量,以免用新的 shell 变量污染调用 shell。空行等主要是为了便于阅读。