如何解决从 Debian Buster VM
我有一个脚本 someutil.sh
,我想在另一个脚本 main.sh
中调用它。
两个脚本都是:
- 在
~/bin
中并且是可执行的 (chmod +x someutil.sh
)。 - 以
#!/bin/bash
为首 - 来自命令行的功能
$PATH 默认包含 ~/bin
,~/.bashrc
包含别名:
alias someutil="someutil.sh"
alias main="main.sh"
我尝试通过以下方式在脚本中运行 someutil
- someutil args(与交互式命令行上的用法相同)
- ./someutil 参数
- ~/bin/someutil.sh 参数
Main.sh
执行但如果我尝试使用别名,则会为“someutil”提供“未找到命令”错误。
someutil
还会创建一个临时使用的文件(在主目录中),然后它会尝试向其中附加一些数据(使用 >>
,但这会引发“权限被拒绝错误”)。但是,我在文件中使用“sed -i ...
”作为输入文件的部分工作正常。
我也尝试遵循这些答案中的建议:
- https://stackoverflow.com/a/8352939/1669825
- Having trouble calling a bash script from another bash script
唯一有效的是使用 ~/bin/someutil.sh
调用函数,但我真的很想使用别名(为了可读性)并将命令添加到路径中以避免总是给出完整路径。我也不明白为什么创建文件的脚本以后不能编辑它...
因此,我显然缺少路径变量(不同用户或环境的不同路径变量)的某些内容,或者不知何故不了解脚本在执行时在哪些权限下运行。
我在 Chromebook 的虚拟机上使用 Debian Buster(“Linux 开发环境(测试版)”)。
将不胜感激!
解决方法
由@cyrus 和 this answer 提供,解决方案是将以下内容添加到我的 main.sh
脚本的开头:
shopt -s expand_aliases
source ~/.bash_aliases
然后,我可以像在交互式 shell 中一样使用我的自定义脚本。
有关临时文件权限的问题是一个简单的、不相关的语法错误,导致脚本尝试执行文件而不是预期的文件 (see this answer)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。