Created
January 22, 2019 19:01
-
-
Save 1234ru/b5b02ffa30f02ea689e674a136845c3d to your computer and use it in GitHub Desktop.
For FreeBSD 11.1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Подсказки | |
# чтобы узнать код клавиши или их комбинации, нужно в терминале сначала нажать Ctrl+V; в полученном коде заменить ^[ на \e (Esc), а просто ^ - на \C- (Ctrl) | |
# bind -P - просмотр привязки имеющихся команд | |
# https://www.computerhope.com/unix/bash/bind.htm | |
cd s | |
export LANG="ru_RU.UTF-8" | |
# PS1="\[\e[93m\]dev> \[\e[0m\]" | |
# Управляющие последовательности для форматирования: https://misc.flogisoft.com/bash/tip_colors_and_formatting | |
# \e[93 - желтый, \e[97 - белый, \e[0m - сброс на цвет по умолчанию | |
# Непечатаемые последовательности нужно оборачивать в \[...\] | |
# см. https://unix.stackexchange.com/a/346093/230984 | |
# Если этого не сделать, начинает глючить перемещение по командам: Ctrl+P (предыдущая), Ctrl+A (в начало строки) и др., если встретится команда, содержащая | | |
# Была попытка сделать вывод команды другим цветом. | |
# Раскрасить команду, а для вывода сбросить цвет к значению по умолчанию. | |
# См. https://unix.stackexchange.com/a/146148/230984 | |
# Не сработала ни оригинальная команда, ни попытка изменить цвет таким же образом: | |
# trap '[[ -t 1 ]] && tput sgr0' DEBUG | |
# trap '[[ -t 1 ]] && tput setf 2' DEBUG | |
# Спросить не получилось, т.к. не хватает репутации для добавления комментария к ответу (нужно 50 очков). | |
set_prompt () { | |
base_path="/usr/local/www/virtual/watches-" | |
absolute_path=$(pwd -P) | |
relative_path=${absolute_path/$base_path/} # https://stackoverflow.com/a/13210909/589600 | |
PS1="\[\e[93m\]dev: $relative_path> \[\e[0m\]" | |
} | |
PROMPT_COMMAND='set_prompt' | |
bind '"\e[A": history-search-backward' # пишем здесь, чтобы ради двух строчек | |
bind '"\e[B": history-search-forward' # не заводить .inputrc | |
#PRODUCTION_SERVER='main.watches.ru' | |
PRODUCTION_SERVER='213.133.103.216' # так быстрее работает ssh (почему-то на DNS-преобразование уходит несколько секунд времени) | |
alias ssh="ssh -p 9722" | |
alias sshw="ssh $PRODUCTION_SERVER" | |
alias scp="scp -P 9722" | |
alias scpms="scp -r -P 9722 main.watches.ru:~/site/" | |
alias fnd='grep -Rl --include="*.php" --include="*.tpl" --include="*.css" --include="*.js" --include="*.sh"' | |
alias fndl='grep -R --color --include="*.php" --include="*.tpl" --include="*.css" --include="*.js" --include="*.sh"' | |
alias upw="ssh $PRODUCTION_SERVER 'svn up ~/site'" | |
alias ngx="sudo /usr/local/etc/rc.d/nginx reload" | |
alias fsize="du -A -B 1 -h -d 0" | |
dbc () { # database copy (former dbcopy.sh) | |
if [[ $1 == "n" ]] # пробелы вокруг == важны! | |
then | |
db_remote="newwatches" | |
db_local=$db_remote | |
else | |
if [[ $1 == "s" ]] | |
then | |
db_remote="storage" | |
db_local=$db_remote | |
else | |
db_remote="-B storage newwatches" | |
db_local="" | |
fi | |
fi | |
if [[ $2 != "" ]] | |
then | |
tables=$2 | |
else | |
tables="" | |
fi | |
# у ssh -p - порт, у scp -P - порт, -p - сохранить оригинальные время создания и права | |
# ssh -p 9722 $PRODUCTION_SERVER "'mysqldump -B $db > ~/$filename'" | |
# scp -P 9722 -p "$PRODUCTION_SERVER:~/$filename" ~/ | |
# mysql < ~/$filename # --force нужен из-за CREATE ALGORITHM=UNDEFINED для VIEW, который требует административных прав | |
ssh -p 9722 $PRODUCTION_SERVER "mysqldump --skip-lock-tables $db_remote $tables" | mysql $db_local | |
if [[ $db_remote != "storage" ]] | |
then | |
mysql -e "UPDATE newwatches.shops SET email = '1234ru@gmail.com'" | |
mysql -e "INSERT IGNORE INTO newwatches.managers SET login = 'для теста', password = '72f511cde3f7fddba525694b9c661fb5', i = 'Для посмотреть', super = 1" | |
fi | |
} | |
rc () { # remote copying of files | |
# Функция для копирования файлов и каталогов с основного сервера с полным сохранением имени и пути | |
# 12.01.2019: на новых dev-площадках (d0.watches.ru и пр.) не работает, т.к. у них пути к каталогу веб-сервера не совпадают с таковыми на основном сервере. | |
# Принимает относительные пути (поэтому удобно использовать, например, находясь в каталоге "рядом" с требуемым файлом), но нужно, чтобы на сервере-источнике и сервере-приемнике они полностью совпадали. | |
# Нельзя поэтому, например, скопировать файл из main.watches.ru:/usr/.../newwatches/file.txt в dev.watches.ru:/.../watches-0/file.txt простой командной rc file.txt | |
# 27.12.2018: чтобы работали шаблоны (типа rc *.xls), в команду нужно добавить кавычки | |
# см. https://unix.stackexchange.com/a/67101 | |
# Насчет статейки. Писать не стал, т.к.: | |
# - realpath не работает, только когда файл не существует; в остальных случаях она прекрасно подходит | |
# - отсутствие разворачивания символических ссылок - это, скорее, минус, а не плюс | |
# (если нужно сохранять путь только относительно домашнего каталога, можно так и написать сам скрипт; только чтобы он работал, нужно входить в дерево по символической ссылке в домашнем каталоге, чтобы pwd отражала путь через эту ссылку, а не реальный) | |
# ABSOLUTE_PATH=realpath "$1" - не работает, если файл еще не существует | |
# ВНИМАНИЕ! Не разворачивает символические ссылки. | |
## ABSOLUTE_PATH="$(cd "$(dirname "$1")"; pwd)/$(basename "$1")" | |
# Далее разбирается команда "$(cd "$(dirname "$1")"; pwd)/$(basename "$1")" | |
# (взято с http://stackoverflow.com/a/3915420/589600) | |
# 1. Аргумент заключаем в кавычки для корректной обработки пробелов и прочих символов, имеющих специальное значение, которые могут в нём встретится | |
TARGET="$1" | |
# 2. Получаем абсолютный путь к целевому каталогу | |
# (тут и скрыто самое замысловатое место) | |
# 2.1. Извлекаем путь к каталогу из указанного пути, будь то относительный или абсолютный. | |
RELATIVE_DIR="$(dirname $TARGET)" | |
# $(...) - подстановка вместо команды (command substitution) - означает "выполнить команду в скобках и поставить её результат (standard output) на место выражения $(...) | |
# dirname - встроенная команда UNIX-систем (стандарт POSIX.2), возвращает часть указанного пути файловой системы слева от последнего слэша (исключая его) или, если его нет, текущий каталог - "." | |
# Таким образом, в переменной RELATIVE_DIR окажется результат выполнения команды dirname. | |
# 2.2. | |
ABSOLUTE_DIR="$(cd $RELATIVE_DIR; pwd)" | |
# Выпонение команд в скобках $(...) вызывает открытие дочернего сеанса (subshell) и не влияет на состояние (текущий рабочий каталог и локальные переменные) сеанса родительского. Это иллюстрируется следующим примером: | |
# > A=1 # завели некоторую переменную | |
# > echo $A | |
# 1 | |
# > bash # открыли дочерний сеанс оболочки | |
# > echo $A | |
# # результат - пустая строка, то есть изначально переменная родительской оболочки не видна | |
# > A=5 | |
# > echo $A | |
# 5 | |
# > exit # завершили дочерний сеанс | |
# > echo $A # теперь проверим, изменилось ли значение переменной в родительской оболочке | |
# 1 # значение осталось прежним | |
# | |
# Так же происходит и с текущим рабочим каталогом. Поэтому его смена внутри скобок - $(cd ...) - никак не отражается в других местах скрипта. | |
# | |
BASENAME="$(basename $TARGET)" # | |
ABSOLUTE_PATH="$ABSOLUTE_DIR/$BASENAME" | |
# А было так: "$(cd "$(dirname "$1")"; pwd)/$(basename "$1")" | |
scp -r -p -P 9722 $PRODUCTION_SERVER:$ABSOLUTE_PATH $ABSOLUTE_PATH | |
# -P - порт, -p - сохранить оригинальные время создания и права | |
# return | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment