bash - bash 根据环境变量运行命令
问题描述
请参阅我想将文件复制到目的地:cp filename /home/example/temp.txt
.
filename
某些程序会更改问题,并将其新名称写入文件中/home/example/.env
。
我想要的是alias cpf=cp ${filename} /home/nope/temp.txt
.bashrc 之类的别名,然后我只需要cpf
在我想将最新的复制finename
到.bashrc 时运行/home/example/temp.txt
。
我试过的:
eval $(grep -v "^#" "/home/example/.env") cp ${filename} /home/nope/temp.txt
并未能得到${filename}
。
是否有一些改变可以使我尝试过的工作?
解决方案
示例.env
:
key1='do not put me in the environment'
key2=1231
filename=thisvaluechanges
key4="I hate being evaluated"
您只想用 评估行filename
。首先测试如何选择该行,例如
grep "^filename=" /home/example/.env
# or
sed -n 's/^\s*filename\s*=\s*/filename=/p' /home/example/.env
接下来,您可以source
选择行。
source <(grep "^filename=" /home/example/.env)
当文件名是固定字符串时(无需$()
评估),您可以不使用source
:
cp $(grep "^filename=" /home/example/.env) /home/nope/temp.txt
在将其放入 an 之前alias
,请记住 a function
can do an alias
can,并且可以做更多事情。您“应该”停止使用alias
.
当您有三个或四个文件(如 filename1、2、3、4)时,您可以使用带参数的函数:
cpf() {
if (( $# = 0 )); then
echo "Usage: cpf filenumber"
else
cp $(grep "^filename${1}=" /home/example/.env) /home/nope/temp.txt
fi
}
cpf 2
您可以使用for调用该函数filename2
。
当您想将文件名放入环境中时,您可以更改功能
source <(grep "^filename${1}=" /home/example/.env)
推荐阅读
- angular - 如何以编程方式获取显示的 AG-Grid 单元格内容与实际值相反
- sql - 使用多个外部参考时的外部参考错误
- python - 二叉搜索树中的添加方法无法正常工作
- c# - C#如何找到随机数数组中最小数字的出现次数?
- gstreamer - 是否可以使用 GStreamer 管道构建简单的音高标签系统?
- asynchronous - 如何仅在从漫长的过程中填充对象后才返回对象集合
- json - 如何解析来自 API 的单值 JSON 响应?
- python - pyspark 数据框将 json 列旋转到新列
- vue.js - 使用 Apollo 和 GraphQL 缓存而不是 Vuex?
- node.js - Express:PayloadTooLargeError 试图读取包含大 JSON 的 POST 正文,尽管设置了限制