linux - 当我的程序使用内部数据库时,如何从 bash 可执行文件在 linux 中创建命令?
问题描述
我在 bash 中编写了一个小程序,并希望使用自定义命令在我的计算机上的任何位置执行它。此外,我的程序使用了一个小型内部数据库,我也希望将其“嵌入”到程序中。下面是我的问题的一个例子,以及我到目前为止所尝试的。
假设我的程序返回用户选择的巴西州的首府。程序文件夹有 3 个文件。一个内部基地称为capitals.csv
:
Capitais,Estados,Siglas dos Estados,Regiões
Rio Branco,Acre,AC,Norte
Maceió,Alagoas,AL,Nordeste
Macapá,Amapá,AP,Norte
Manaus,Amazonas,AM,Norte
Salvador,Bahia,BA,Nordeste
Fortaleza,Ceará,CE,Nordeste
Brasília,Distrito Federal,DF,Centro-Oeste
Vitória,Espírito Santo,ES,Sudeste
Goiânia,Goiás,GO,Centro-Oeste
São Luís,Maranhão,MA,Nordeste
Cuiabá,Mato Grosso,MT,Centro-Oeste
Campo Grande,Mato Grosso do Sul,MS,Centro-Oeste
Belo Horizonte,Minas Gerais,MG,Sudeste
Belém,Pará,PA,Norte
João Pessoa,Paraíba,PB,Nordeste
Curitiba,Paraná,PR,Sul
Recife,Pernambuco,PE,Nordeste
Teresina,Piauí,PI,Nordeste
Rio de Janeiro,Rio de Janeiro,RJ,Sudeste
Natal,Rio Grande do Norte,RN,Nordeste
Porto Alegre,Rio Grande do Sul,RS,Sul
Porto Velho,Rondônia,RO,Norte
Boa Vista,Roraima,RR,Norte
Florianópolis,Santa Catarina,SC,Sul
São Paulo,São Paulo,SP,Sudeste
Aracaju,Sergipe,SE,Nordeste
Palmas,Tocantins,TO,Norte
一个python文件:
#get_capital.py
import pandas as pd
import sys
from unidecode import unidecode
df=pd.read_csv("capitais.csv")
df["Estados"] = [unidecode(k.lower()) for k in df["Estados"]]
user_state = unidecode(sys.argv[1].lower())
answer = df[df["Estados"]==user_state]["Capitais"].to_list()[0]
print("A capital de {} é {}".format(user_state.title(), answer))
最后,一个 bash 文件:
#!/usr/bin/bash
python get_capital.py $1
执行的一个例子是:
bash stack.sh bahia
输出:
A capital de Bahia é Salvador
到目前为止我已经尝试过:
我在这里读到,可以创建一种指向 bash 文件的超链接,以便可以从计算机上的任何位置调用它。为此,我只需键入:
sudo ln -s PATH / stack.sh /usr/bin/stack.sh
PATH
我的 bash 文件当前所在的路径在哪里。
这行得通,但它仍然不是我想要的,原因有两个。首先,我仍然需要bash
在文件名之前使用这个词。我知道我可以使用创建二进制文件chmod +x stack.sh
(有关此问题的更多详细信息,请参阅此问题)。但是,我想做的只是使用自定义命令stack
而不是./stack
. 此外,虽然超链接有效并且我可以从计算机上的任何位置访问我的 bash 文件,但我的程序本身只能在其原始文件夹中工作,因为 csv 文件只在那里。
无论如何,我如何将这些文件“打包”到一个文件夹中,该文件夹可以从我的计算机上的任何位置访问并且可以使用自定义命令调用?
解决方案
推荐阅读
- python-3.x - 运行 shub 命令的关键字异步错误
- php - 在 PHP 中使用正则表达式删除空白标签
- git - 为存储库的分支设置 VSTS 策略配置
- tensorflow - Tensorflow:可微分基元
- sql - SQL 查询的 Group By 和 Order By
- laravel - 如何将 Laravel 4.2 实时项目导入本地主机
- google-apps-script - 服务器端微秒计时
- python - 用 Python 嵌入 Google 地球
- jaxb - wsimport 绑定命名空间错误
- javascript - 问题设置回调结果等于对象属性 (node-tesseract)