Info
Content

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
Back to top