【问题标题】:Calling a Bash script from within another bash script on Debian Buster VM从 Debian Buster VM 上的另一个 bash 脚本中调用 Bash 脚本
【发布时间】:2021-04-17 14:41:41
【问题描述】:

我有一个脚本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 args
  • ~/bin/someutil.sh 参数

Main.sh 执行,但如果我尝试使用别名,则“someutil”会出现“找不到命令”错误。

someutil 还创建一个临时使用的文件(在主目录中),然后尝试将一些数据附加到该文件(使用>>,但这会引发“权限被拒绝错误”)。但是,我使用“sed -i ...”将文件作为输入文件的部分工作正常。

我也尝试过遵循这些答案的建议:

唯一可行的方法是使用~/bin/someutil.sh 调用函数,但我真的很想使用别名(为了便于阅读)并将命令添加到路径以避免总是给出完整路径。我也不明白为什么创建文件的脚本以后不能编辑它...

因此,我显然遗漏了路径变量(不同用户或环境的不同路径变量),或者不知何故不了解脚本在执行时运行的权限。

我在 Chromebook 上的虚拟机上使用 Debian Buster(“Linux 开发环境(测试版)”)。

我们将不胜感激!

【问题讨论】:

  • 这可能会有所帮助:using alias in shell script?
  • @Cyrus 其中一个答案在您链接的线程中链接得更深一点,即完成了这项工作,即关于设置 shopt -s expand_aliases 然后 source ~/.bash_aliases 在脚本本身中。谢谢!我会发布一个答案并参考你和我通过你找到的链接(或标记为重复?)

标签: bash alias debian-buster


【解决方案1】:

感谢@cyrus 和this answer,解决方案是将以下内容添加到我的main.sh 脚本的开头:

shopt -s expand_aliases
source ~/.bash_aliases

然后,我可以像在交互式 shell 中一样使用我的自定义脚本。

关于临时文件权限的问题是一个简单的、不相关的语法错误,导致脚本尝试执行文件而不是预期的 (see this answer)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-06
    • 2014-12-26
    • 2023-01-13
    • 1970-01-01
    • 2017-01-26
    • 2012-07-23
    • 1970-01-01
    • 2012-06-22
    相关资源
    最近更新 更多