преобразование всех файлов в папке в псевдонимы функций с помощью bash

#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 Попробуйте еще раз, поменял переменную местами