как установить скрипт для запуска в любом месте из командной строки?

<p>если у меня есть базовый скрипт python, с его hashbang и что-то не на месте, так что из терминала в linux я могу запустить</p><pre><code>/path/to/file/myscript [args] </code></pre><p>без выполнения через интерпретатор или любые расширения файлов, и он будет выполнять программу.</p><p>поэтому я бы установил этот скрипт, чтобы я мог просто набрать</p><pre><code>myscript [args] </code></pre><p>где-нибудь в системе и он будет работать? может ли это быть реализовано для всех пользователей в системе, или оно должно быть переделано для каждого? я просто помещаю сценарий в определенную директорию, или другие вещи необходимы?</p>

<p>лучшее место для таких вещей - <code>/usr/local/bin</code>.</p><p>это обычное место для установки пользовательских двоичных файлов, и оно должно быть в начале вашей <code>path</code>.</p><p>просто скопируйте туда скрипт (возможно, с помощью <code>sudo</code>), и он должен работать для любого пользователя.</p>

<h2>пошаговое руководство по созданию скрипта python в любом месте:</h2><p><strong> сделать скрипт на python: </strong></p><pre><code>cd /home/el/bin touch stuff.py chmod +x stuff.py </code></pre><p><strong> узнайте, где ваш питон: </strong></p><pre><code>which python /usr/bin/python </code></pre><p>поместите этот код там:</p><pre><code>#!/usr/bin/python print "hi" </code></pre><p><strong> запустите в этом же каталоге: </strong></p><pre><code>python stuff.py </code></pre><p><strong> перейти в каталог, и он не доступен: </strong></p><pre><code>cd .. stuff.py -bash: stuff.py: command not found </code></pre><p><strong> не найдено! как мы и ожидаем, добавьте путь к файлу python в $ path </strong>vi ~/.bashrc <strong> добавить файл: </strong>export path=$path:/home/el/bin </code></pre><p><strong> сохраните его, повторно примените .bashrc и повторите попытку </strong></p><pre><code>source ~/.bashrc </code></pre><p><strong> попробуйте снова: </strong></p><pre><code>cd /home/el stuff.py </code></pre><p><strong> печать: </strong></p><pre><code>hi </code></pre><p>хитрость в том, что оболочка bash знает язык файла через шебанг.</p>

<p>просто создайте <code>~/bin</code> и поместите <code>export path=$path:$home/bin</code> в свой bashrc/профиль. не связывайтесь с системой, она<em> будет </em>откусит вас назад, поверьте мне. </p><p>еще несколько вещей (относящихся к вопросу, но не часть ответа): </p><ol> <li>другой способ <code>export path=$home/bin:$path</code> не является безопасным, поскольку bash будет искать в вашей папке <code>~/bin</code> исполняемые файлы, и если их имена совпадают с другими исполняемыми файлами в вашем исходном <code>$path, вы будете удивлены неожиданным/нерабочим выполнением команды.  не забудьте chmod+x при сохранении вашего скрипта в ~/bin. помните о том, что вы помещаете в свою папку ~/bin, если вы только что что-то тестируете или работаете над незавершенным сценарием, всегда лучше использовать ./$script\_name из <code>cwd</code> для выполнения сценария, чем помещать его в <code>~/bin</code>.</li> </ol>

<p>быстрый ответ - <a href="https://en.wikipedia.org/wiki/symbolic\_link"><code>symlink</code></a> ваш скрипт в любой каталог, включенный в вашу систему <code>$path.длинный ответ описан ниже с помощью примера (это то, что я обычно делаю):а) создайте сценарий, например $home/desktop/myscript.py</code>:</p><pre><code>#!/usr/bin/python print("hello pythonista!") </code></pre><p>б) измените разрешение файла скрипта, чтобы сделать его исполняемым: </p><p><code>$ chmod +x myscript.pyc) добавьте пользовательский каталог в $path</code> (см. почему в примечаниях ниже), чтобы использовать его для пользовательских сценариев:</p><p><code>$ export path="$path:$home/bin"г) создайте символическую ссылку на скрипт следующим образом:$ ln -s $home/desktop/myscript.py $home/bin/hello</code></p><p>обратите внимание, что <code>hello</code> (может быть любым) - это имя команды, которую вы будете использовать для вызова вашего скрипта.</p><p>замечания: </p><p>i) причина использования <code>$home/bin вместо /usr/local/bin состоит в том, чтобы отделить локальные сценарии от сценариев других пользователей (если вы хотите) и других установленных компонентов.ii) чтобы создать символическую ссылку, вы должны использовать полный правильный путь, т.е.$home/bin</code> хорошо <code>~/bin</code> нет хорошо!</p><p>вот полный пример:</p><pre><code> $ pwd ~/desktop $ cat > myscript.py << eof > #!/usr/bin/python > print("hello pythonista!") > eof $ export path="$path:$home/bin" $ ln -s $home/desktop/myscript.py $home/bin/hello $ chmod +x myscript.py $ hello hello pythonista! </code></pre>

<p>размещение сценария где-нибудь в переменной path (например, <code>/usr/local/bin</code>) является хорошим решением, но это<em> заставляет </em>всех пользователей вашей системы использовать/видеть ваш сценарий.</p><p>добавление псевдонима в <code>/etc/profile</code> может быть способом сделать то, что вы хотите, позволяя пользователям вашей системы отменить это с помощью команды <code>unalias</code>. строка для добавления будет:</p><pre><code>alias myscript=/path/to/file/myscript </code></pre>

<p>введите <code>echo $path</code> в командной консоли. это каталоги, в которых выполняется поиск при вводе <code>command</code>, поэтому поместите их в один из них. </p><p>правка: очевидно, не используйте <code>/usr/bin</code>, используйте <code>/usr/local/bin</code></p>

<p>просто создайте символическую ссылку на ваш скрипт в/usr/local/bin /:</p><pre><code>sudo ln -s /path/to/your/script.py /usr/local/bin/script </code></pre>

<p>в соответствии с <a href="http://en.wikipedia.org/wiki/filesystem\_hierarchy\_standard">fhs</a> <code>/usr/local/bin/</code> является хорошим местом для пользовательских сценариев. я предпочитаю делать их <code>755</code> <code>root:root</code>, скопировав их туда.</p>