Bash Tricks
Убрать префикс из имен файлов
Например есть куча файлов у которых в названии есть перфикс
В моем случае префикс это _frem_iptables.txt
...
vendors-highscoring-01x.g01.i-free.ru_frem_iptables.txt
vendors-msgpro-filterws-01.g01.i-free.ru_frem_iptables.txt
vendors-web-backend-01x.g01.i-free.ru_frem_iptables.txt
voiceassistant-vas01.aws-eu-west-1.i-free.ru_frem_iptables.txt
vrs02.g01.i-free.ru_frem_iptables.txt
web-backend-01x.g01.i-free.ru_frem_iptables.txt
web-backend-01y.g01.i-free.ru_frem_iptables.txt
web-backend-02x.g01.i-free.ru_frem_iptables.txt
web-backend-02y.g01.i-free.ru_frem_iptables.txt
web-srv2.pro.i-free.ru_frem_iptables.txt
web-srv3.pro.i-free.ru_frem_iptables.txt
wf-vas01.g01.i-free.ru_frem_iptables.txt
zabbix-proxy.l5.i-free.local_frem_iptables.txt
...
Делаю вот так:
for name in `ls -1`; do mv $name ${name%_frem_iptables.txt}; done
-
${var#pattern}
- удаляет наименьшую строку с левой стороны, которая соответствует шаблону -
${var##pattern}
- удаляет наибольшую строку с левой стороны, которая соответствует шаблону -
${var%pattern}
- удаляет наименьшую строку с правой стороны, которая соответствует шаблону -
${var%%pattern}
- удаляет наибольшую строку с правой стороны, которая соответствует шаблону
Более подробно это описано в части "Parameter Expansion" в man bash
sshpass и как выполнить команду через sudo
SSHPass
for servername in `cat /tmp/servernames-for-ferm-reload`; do sshpass -p'ПАРОЛЬ' ssh -tt i.dudin_pro@${servername} 'echo ПАРОЛЬ | sudo -S -s /bin/bash -c "/etc/init
.d/ferm reload"';echo $servername; done
<<<
В баше есть перенаправления потоков, и среди них есть штука их трех стрелок
Она добавляет перенос строки в конец переданного ей (но это не точно)
[vandud@desktop ~]$ cat < "zhopa"
bash: zhopa: No such file or directory
[vandud@desktop ~]$ cat << "zhopa"
> ^C
[vandud@desktop ~]$ cat <<< "zhopa"
zhopa
[vandud@desktop ~]$
Это можно использовать в командах которые ждут ввода пользователя
Например openssl s_client
после вывода ожидает от пользователя "Q" и только после этого завершается
[vandud@desktop ~]$ openssl s_client -connect smsservisy.ru:443 2>/dev/null | openssl x509 -noout -subject
subject=OU = Domain Control Validated, OU = Gandi Standard Wildcard SSL, CN = *.i-free.com
Q # ввел руками и нажал enter
А если передать туда "Q" через <<<
, то работает само
[vandud@desktop ~]$ openssl s_client -connect smsservisy.ru:443 2>/dev/null <<< "Q" | openssl x509 -noout -subject
subject=OU = Domain Control Validated, OU = Gandi Standard Wildcard SSL, CN = *.i-free.com
[vandud@desktop ~]$
А еще в случае с openssl можно сделать так:
echo | openssl s_client aoseuhosaetuaoue
No Comments