LINUX.ORG.RU
решено ФорумAdmin

как вызывать из командной строки скрипт по имени.

 


0

2

ну всмысле есть скрипт лежит где то там себе /usr/share/Lynis

нужно ссылку какую то куда на него в bin прописать чтобы в любом месте можно было вызвать в командной строке типо # lynis

но вот как это сделать или как найти как это сделать не смог. Нубский вопрос но спасибо за помощь.


Ты серьёзно?
ln -sf /path/to/sctipt.sh /usr/bin/script
Ну и вызывать
script
Не забыть дать права +x для самого скрипта.

Nirvandil
()
PATH=$PATH:/usr/share/Lynis
chmod u+x /usr/share/Lynis/script.sh
script.sh

Куда записывать $PATH что-бы каждый раз не перезадавать читай в man, там масса вариантов

Deleted
()
Ответ на: комментарий от Nirvandil

спасибо сделал ln -sf /usr/share/Lynis/lynis /usr/bin/lynis

➜ / lynis Fatal error: can't find include directory Make sure to execute Lynis from untarred directory or check your installation.

luk911
() автор топика
Ответ на: комментарий от Deleted

.bash_profile это понятно но хотелось бы именно сделать как обычно программы делают. Систем centOS 7 там что то через bin или что-то такое, я видел, но не помню как точно.

luk911
() автор топика
# echo alias lynis=\'\"/usr/share/Lynis\"\'>>'/etc/bash.bashrc'; exit

/thread

h578b1bde ★☆
()
Ответ на: комментарий от luk911

Не знаю как в системах с новомодным systemd(там PATH заменили на systemd-path, но вроде ни один дистрибутив до сих пор это не использует), но обычно используется переменная $PATH в которой записаны все пути к бинарникам, ну или второй вариант - симлинк, описан выше.

Deleted
()
Ответ на: комментарий от luk911

Значит, этому скрипту хочется запускаться из определённого каталога.
Если судить по исходникам на гитхабе, ему нужен правильный $INCLUDEDIR , а что, если запустить так:
INCLUDEDIR=/usr/share/Lynis/include lynis
(или где там его директория с инклюдом?). Это при наличии предыдущего симлинка.

Nirvandil
()
Ответ на: комментарий от Nirvandil

да походу именно в этом загвоздка, ваш пример тоже не работает, это типо мини баш надо писать в котором заходить в ту дирректорию и от туда запускать. Ладно спасибо, не буду морочаться. Но в целом то такие линки то что нужно спасибо.

luk911
() автор топика
Ответ на: комментарий от h578b1bde

а вы уверенны что туда надо его ? в еtc есть тольео bashrc и то не уверен что глобально надо его туда.

luk911
() автор топика
Ответ на: комментарий от h578b1bde

и я так понимаю запись должна быть что-то вроде echo 'alias lynis=«/usr/share/Lynis/lynis»' >> ~/.bashrc а у вас явно не правильно.

luk911
() автор топика
Ответ на: комментарий от luk911

а вы уверенны что туда надо его ? в еtc есть тольео bashrc и то не уверен что глобально надо его туда.

В дебианах /etc/bash.bashrc есть изкоробки, ищи аналог в своём дистрибутиве. Если нужно локально для одного пользователя — есть ~/.bashrc

h578b1bde ★☆
()
Ответ на: комментарий от luk911

и я так понимаю запись должна быть что-то вроде echo 'alias lynis=«/usr/share/Lynis/lynis»' >> ~/.bashrc а у вас явно не правильно.

У меня всё правильно, а у тебя без бэкслешей кавычки съедятся. А вообще это шутка, бери nano/vi/vim/emacs/ed/notepad.exe/etc и правь оттуда.

h578b1bde ★☆
()
Ответ на: комментарий от h578b1bde

спорить не буду, но вы сами то попробуйте сделать то что написали

echo alias lynis=\'\"/usr/share/Lynis\"\'>>’~/.bashrc'; exit

а потом попробуйте так:

echo 'alias lynis="/usr/share/Lynis/lynis"' >> ~/.bashrc

ну и маны что ли почитайте себе на ночь.

luk911
() автор топика
Ответ на: комментарий от luk911

УМВР @ RTFM

/tmp/test# echo alias lynis=\'\"/usr/share/Lynis\"\'>>'.bashrc'; exit
exit
…
/tmp/test# cat .bashrc 
alias lynis='"/usr/share/Lynis"'

Привыкай к экранированию, сынок, потом спасибо скажешь.

h578b1bde ★☆
()
Ответ на: УМВР @ RTFM от h578b1bde

у вас какой то особый случай, у меня после вашей команды сессия по ssh закрывается :)

luk911
() автор топика
Ответ на: УМВР @ RTFM от h578b1bde

без exit норм, те же яйца вид с боку.

luk911
() автор топика
Ответ на: комментарий от luk911

у вас какой то особый случай, у меня после вашей команды сессия по ssh закрывается :)

А у меня не закрывается т.к. я сижу не через ssh. Вообще это изначально так и задумано, поскольку для того чтобы изменения .bashrc вступили в силу необходимо перелогиниться.

h578b1bde ★☆
()
Ответ на: комментарий от luk911

только не понятно зачем два раза в ковычки то ? ='"

Поменяй Lynis на Program Files и почувствуй разницу. Можешь ещё с опциями к скрипту поиграться.

h578b1bde ★☆
()
Ответ на: комментарий от Nirvandil

ln -sf /path/to/sctipt.sh /usr/bin/script

Лазить руками в /usr/ есть в общем случае весьма вредный совет. Если надо всесистемно, то в /usr/local/, а здесь, судя по всему, и пользовательского ~/.bin хватит. А поскольку при гипотетическом переносе $HOME на другую машинку ссылка отвалится, то совсем уж корректно было бы использовать локальный пользовательский ~/.local/bin. Его, разумеется, нужно создать и прописать в $PATH.

Zmicier ★★★★★
()
Ответ на: комментарий от luk911

[В] .bash_profile[,] это понятно

Нет, не в .bash_profile. Вообще не создавайте этот файл, если не хотите потом долго и упорно искать, где собака порылась.

В ~/.profile.

Zmicier ★★★★★
()
Ответ на: комментарий от luk911

и что две ковычки сделают это как то лучше ? не совсем понял. Где про это почитать ?

Наилучший источник для чтения — выхлоп ошибок в консоли после того как ты с помощью alias или напрямую с консоли попытаешься запустить что-то вроде /usr/share/some path/some script.sh --option без каких-либо кавычек. Создай тестовый скрипт с пробелом в имени и каким-нибудь echo "${1}" внутри да и проверь сам.

h578b1bde ★☆
()
Ответ на: комментарий от h578b1bde

Кавычки же помогут отделить пути от ключей и одновременно избежать проблем с пробелами: "/usr/share/some path/some script.sh" --option. А поскольку .bashrc сам по себе обычный скрипт — нужны ещё внешние одинарные кавычки дабы баш интерпретировал всю эту хрень как одну строку.

h578b1bde ★☆
()
Последнее исправление: h578b1bde (всего исправлений: 1)
Ответ на: комментарий от luk911

Да, само собой, здесь в bin. А так, я говорил, что в /usr/ вообще (не только в bin) лазить руками чревато, тогда как в /usr/local/ более-менее можно. (Справедливо для пакетной поставки, а не для GNU/Linux from scratch, разумеется.)

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от h578b1bde

спасибо буду пробовать, но в целом имена с пробелом дурной тон в мире линукса, как мне кажется :)

luk911
() автор топика
Ответ на: комментарий от luk911

спасибо буду пробовать, но в целом имена с пробелом дурной тон в мире линукса, как мне кажется :)

Дурной тон — это софт, падающий на именах с пробелами.

h578b1bde ★☆
()
Ответ на: комментарий от ashot

нет выше отписались, скрипт требует вкулючения дирректории. поставил для интереса через yum и посмотрел на старт скрипт тот что попал в /usr/bin там около 1000 строк, так что так просто не получится. Всем спасибо.

luk911
() автор топика
Ответ на: комментарий от luk911

А, понял. Тогда так:

alias script.sh="cd /usr/share/Lynis && script.sh"

ashot ★★★★
()
Ответ на: комментарий от h578b1bde

любите вы лишнии ковычки :) вот так работате

echo "alias lynis='cd /usr/share/Lynis && /usr/share/Lynis/lynis'" >> ~/.zshrc

luk911
() автор топика
Ответ на: комментарий от h578b1bde

а еще короче будет так

echo "alias lynis='cd /usr/share/Lynis && ./lynis'" >> ~/.zshrc

luk911
() автор топика
Ответ на: комментарий от Zmicier

Лазить руками в /usr/ есть в общем случае весьма вредный совет.

Вообще говоря, согласен, просто меня недавно LFS покусал, до сих пор отхожу. Особенно вредный - делать ln -sf, тогда ещё и местный бинарь можно незаметно прибить.

Nirvandil
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.