#python #bash #alias
#python #bash #псевдоним
Вопрос:
У меня есть папка с файлами python. Я хочу превратить их в функции, которые я могу вызывать в bash. Следующая однострочная строка находится в текстовом файле моего профиля, загружаемом при входе в систему bash, но она не работает. Как я могу это исправить?
for i in `ls ~/Dropbox/Documents/tools/python`; do
fullfilename=$(basename "$i");
filename="${fullfilename%.*}";
$("alias $filename='/usr/local/bin/python3.3 ~/Dropbox/Documents/tools/python/$fullfilename '");
done
Редактировать:
по рекомендации Ливиу Чирку я удалил команду «до и после псевдонима». Ниже приведен новый код:
for i in `ls ~/Dropbox/Documents/tools/python`; do
fullfilename=$(basename "$i");
filename="${fullfilename%.*}";
$(alias $filename='/usr/local/bin/python3.3 ~/Dropbox/Documents/tools/python/$fullfilename ');
done
Теперь я получаю эту ошибку:
$ findfactors 40
-bash: findfactors: command not found
Ответ №1:
Три шага, чтобы сделать скрипты Python исполняемыми из bash
.
Во-первых, в верхней части каждого файла в этом каталоге добавьте следующую строку, чтобы указать, bash
какой интерпретатор использовать.
#!/usr/local/bin/python3.3
Во-вторых, установите для всех этих файлов значение executable.
chmod u x ~/Dropbox/Documents/tools/python/*
В-третьих, добавьте этот каталог в свой PATH
. Этот используется ~/.bashrc
, в то время как два других являются одноразовыми.
export PATH=$PATH:$HOME/Dropbox/Documents/tools/python
Комментарии:
1. Я бы проголосовал «за», но у меня недостаточно репутации; отличное решение в стиле unix по сравнению с моей уродливой попыткой сделать это!
2. @Mica, не беспокойся. Наслаждайтесь удобством вашего нового скрипта на Python! 🙂
3. Иногда
#!/usr/bin/env python3.3
предпочтительнее#!/usr/local/bin/python3.3
. Первый будет использоватьPATH
для поискаpython3.3
, в то время как второй использует жестко закодированное местоположение.
Ответ №2:
Похоже, вам нужно удалить « из вашей команды alias.
Попробуйте
$(alias $filename='/usr/local/bin/python3.3 ~/Dropbox/Documents/tools/python/$fullfilename ');
Вместо
$("alias $filename='/usr/local/bin/python3.3 ~/Dropbox/Documents/tools/python/$fullfilename '");
Комментарии:
1. Рассмотрите возможность переноса этого кода в ~/.bashrc. Также следуйте советам Мерлина 1) и 2).
2. есть ли причина, по которой я должен использовать ~ /.bashrc поверх /etc / profile? кроме того, у меня есть textmate; превратить файл python в исполняемый файл так же просто, как перейти к началу файла, ввести py, нажать tab и сохранить 😀
3. /etc/profile — это общесистемный конфигурационный файл, который обычно следует оставлять нетронутым. Кроме того, вам придется позаботиться о ПУТИ. В любом случае, вы подали мне хорошую идею для моего .vimrc — спасибо 🙂
4. Я не знаю, откуда взялся этот код, и я его не понимаю, но это есть в моем / etc / profile:
if [ -x /usr/libexec/path_helper ]; then eval `/usr/libexec/path_helper -s` fi if [ "${BASH-no}" != "no" ]; then [ -r /etc/bashrc ] amp;amp; . /etc/bashrc fi
; это то, что вы подразумеваете под «позаботьтесь о ПУТИ»?5. Вы запустили две темы обсуждения в одном комментарии. Мое «Также» обозначает начало ответа на вашу тему textmate-path-to-binaries 🙂 извините, если я вас смутил
Ответ №3:
Вы имеете в виду что-то вроде
for i in "$HOME"/Dropbox/Documents/tools/python/*; do
fullfilename="$(basename "$i")"
filename="${fullfilename%.*}"
alias "$filename"="/usr/local/bin/python3.3 ~/Dropbox/Documents/tools/python/$fullfilename"
done
Комментарии:
1. -bash: псевдоним: =/usr/local/bin/python3.3 ~/Dropbox/Documents/tools/python/»$fullfilename»: не найден -bash: псевдоним: =/usr/local/bin/python3.3 ~/Dropbox/Documents/tools/python/»$fullfilename»: не найден
2. @Mica Попробуйте еще раз, поменял переменную местами