Для практики веб-разработки я использую стек LAMP на Ubuntu 17.10. Для этого я создаю каталоги в /var/www
, каждый каталог называют в честь проекта.
Для создания подкаталога, я использую терминал и:
david@Ed:/var/www/html$ mkdir projectName
david@Ed:/var/www/html$ cd projectName
david@Ed:/var/www/html/projectName$ mkdir css img js
david@Ed:/var/www/html/projectName$ touch index.html
david@Ed:/var/www/html/projectName$ ls
css img index.html js
Это работает. И, во всей честности, является совсем не трудным. Но, есть ли средство, которым я могу упростить это?
Я знаю что:
mkdir -p projectName/css
Создаст обоих css
, и родитель projectName
, каталог (если тот родитель уже не существует), но он все еще оставляет требование создания других двух каталогов и index.html
файл (снова, это не особенно трудно, но чувствует, что должно быть ненужным).
Идеально я хотел бы это команда mkdir <projectName>
когда выполнено в /var/www
каталог создал бы <projectName>
каталог с css
, img
, js
каталоги и index.html
документ (что документ, идеально содержащий скелет действительного документа HTML*). Однако я принимаю то злоупотребление mkdir
команда, вероятно, привела бы к непредвиденным/предсказуемым пограничным случаям и последствиям, таким образом, вероятно, лучший компромисс является сценарием некоторого вида.
С вышеупомянутым в памяти, я создал следующий (наивный/простой) сценарий:
#!/bin/bash
mkdir $@
cd $@
mkdir css img js
touch index.html
Я называю вышеупомянутый сценарий следующим образом:
./createDir.sh projectName
Это работает, но является меньше, чем идеал; проблемы:
index.html
имеет тип plain text document (text/plain)
, вместо ожидаемого HTML document (text/html)
, и конечноКроме того, несколько очевидно, оба css
и js
каталоги были бы также – идеально – быть созданными с документами (project.css
и project.js
) неповрежденный.
Так, есть ли средство, которым я могу создать – с использованием сценария, или иначе – каталог с его подкаталогами и документы?
*. Как элементарный пример:
<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="js/project.js"></script>
<link href="css/project.css" rel="stylesheet" />
</head>
<body></body>
</html>
Я предположил бы, что Вы, чтобы сделать что-то как команда adduser делаете со скелетом (https://unix.stackexchange.com/questions/285708/skeleton-directory-how-to-add-my-own-directories).
Сделайте шаблон/скелет где-нибудь, где все начальные файлы и каталоги для проекта организованы, как они были бы в проекте. После создания каталога для нового проекта, Вы просто копируете скелет в место назначения с простой копией:
cp -fvar <template directory> <destination directory>
Параметры в команде CP следующие:
f - force overwrite if destination already exists
v - verbose to show what is being copied
a - archive to preserve file permissions and ownerships
r - recursive to copy all directories and files.
Я указал бы здесь на параметр архива, который позволяет Вам устанавливать корректные файлы и полномочия каталогов и владения в шаблоне. Они будут сохранены при копировании и таким образом у Вас есть файлы в проекте с корректными полномочиями для веб-сервера для доступа к ним. Если Вы хотите иметь различные владения файлов для каждого проекта, необходимо будет сделать это вручную, снова с простыми командами (chmod -R <permissions> <destination directory>
и chown -R <ownership> <destination directory
).
Вам будет нужен некоторый шаблон для Вашего index.html
скопировать с. Но можно создать такой шаблон на лету и затем скопировать его в желаемое место назначения. install
команда может помочь:
#!/usr/bin/env bash
template=$(mktemp); # creates a temporary file, usually in /tmp
# Add the HTML code to that temporary file:
cat << EOF > $template
<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="js/project.js"></script>
<link href="css/project.css" rel="stylesheet" />
</head>
<body></body>
</html>
EOF
# "Install" the file with the given mode
# and create any intermediate directories:
install -m 0644 -D $template /var/www/html/projectName/index.html
# remove the temporary file
rm $template;
exit 0;
Вероятно, необходимо запустить этот скрипт через sudo
потому что /var/...
не является мировым перезаписываемым.
В то время как это - несовершенный ответ и главным образом производится через некоторые дальнейшие поиски после того, как я отправил вопрос, я обновил свой сценарий и решил большую часть проблемы.
Мой текущий сценарий (одинаково наивный и простой, хотя это, конечно):
#!/bin/bash
mkdir $@
cd $@
mkdir css img js
cat > index.html <<- "EOF"
<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="js/project.js"></script>
<link href="css/project.css" rel="stylesheet" />
</head>
<body></body>
</html>
EOF
cat > css/project.css <<- "EOF"
*, ::before, ::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
EOF
cat > js/project.js <<- "EOF"
;
EOF
Это чувствует себя немного грязным, хотя это действительно работает. Основной вопрос с этим, текущим, подход состоит в том, что заключительная кошка звонит:
cat > js/project.js <<- "EOF"
;
EOF
Это для представления документа, который правильно определяется type
свойство как application/javascript
, тогда как использование:
touch js/project.js
Просто создает еще один документ – с корректным расширением типа файла – чей атрибут типа plain text document (text/plain)
.