%2C%20!%24%3Ar%3Ar%20(%D0%B2%D0%BE%D1%81%D0%BA%D0%BB%D0%B8%D1%86%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9%20%D0%B7%D0%BD%D0%B0%D0%BA%20%C2%AB%D0%B4%D0%BE%D0%BB%D0%BB%D0%B0%D1%80%C2%BB%20%D0%B8%20%D0%B4%D0%B2%D0%BE%D0%B5%D1%82%D0%BE%D1%87%D0%B8%D0%B5%20%C2%ABr%C2%BB)%2C%20!%23%3At%20(%D0%B2%D0%BE%D1%81%D0%BA%D0%BB%D0%B8%D1%86%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9%20%D0%B7%D0%BD%D0%B0%D0%BA%20%C2%AB%D1%80%D0%B5%D1%88%D0%B5%D1%82%D0%BA%D0%B0%C2%BB%20%D0%B8%20%D0%B4%D0%B2%D0%BE%D0%B5%D1%82%D0%BE%D1%87%D0%B8%D0%B5%20%C2%ABt%C2%BB)%20%D0%B2%20%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%20%D0%BD%D0%B8%D0%B6%D0%B5%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B0%D1%85%20bash%3F.png)
Я пытался установить пакет Nagios и наткнулся на эти странные расширения bash в руководствездесь. Может кто-нибудь помочь мне понять, что означают расширения? Ссылка на вики также будет полезна для будущих ссылок.
root@z:~> wget http://mathias-kettner.de/download/check_mk-1.1.7i5.tar.gz
root@z:~> tar zxvf !#:t
root@z:~> chown -R root:root !$:r:r && chmod -R o-w !$:r:r && cd !$:r:r
root@z:~/check_mk-1.1.7i5> ./setup.sh
решение1
Этоbash
история расширения ключевые слова. Они выбирают строку из истории оболочки и вставляют ее (части) заново, возможно, после модификации. Сайт, на который вы ссылаетесь, делает разумную работу по их объяснению, но он не описывает их все.
tar zxvf !#:t
на самом деле не имеет смысла: !#
выбирает строку, набранную до сих пор, но это tar zxvf
и мы не хотим повторно использовать ничего из этого. Это должно быть
tar zxvf !$:t
который выбирает последнюю часть предыдущей строки ( !$
), которая является URL-адресом, указанным для wget
, и берет часть имени файла ( :t
, для tail — строго говоря, это то, что осталось после последнего разделителя каталогов, /
, что прекрасно работает с URL-адресами).
Затем
chown -R root:root !$:r:r
выбирает последнюю часть предыдущей строки, удаляет расширение файла ( :r
— строго говоря, он удаляет все, что находится после последнего .
, включая .
) дважды, что дает имя каталога (предполагая, что tarball содержит каталог с тем же именем, что и базовое имя tarball). Команды chmod
и cd
действуют таким же образом.