我的公司有一个在 Linux 中安装的自定义工具,用于将文件上传到名为oTools
.当我打开新终端时,我可以(从任何文件夹)运行oTools upload file
并文件已上传至服务器。
但是,该工具没有一次上传多个文件的选项。所以我正在尝试构建一个 bash 脚本来做到这一点。这是我构建的代码
#!/bin/sh
for file in ./folder/*
do
oTools upload $file
done
但我有以下错误:
./upload-all.sh: oTools: 未找到
我检查了我的文件.bashrc
,它包含 oTools 的路径:
alias oTools="/home/user/folder/oTools-cli"
我还尝试将完整路径放在我的脚本中(上面的路径,即.bashrc
文件中的路径),但我遇到了同样的问题。我尝试使用ls
而不是我安装的工具执行相同的代码,并且它有效......
那么,如何制作 bash 脚本来识别我的自定义工具呢?
答案1
你至少面临两个问题:
当 shell 非交互式时,别名不会扩展,除非
expand_aliases
使用 来设置 shell 选项shopt
。.bashrc
通常保存交互式 shell 的配置,而不是脚本(也称为非交互式 shell)的配置。
有一些解决方案:
# Set expand_aliases option and add the alias (in your script)
shopt -s expand_aliases
alias oTools="/home/user/folder/oTools-cli"
# Create a function instead of an alias (in your script)
oTools() { /home/user/folder/oTools-cli "$@"; }
# Add /home/user/folder to your PATH (in your .profile)
PATH="/home/user/folder:$PATH"
答案2
当您编写脚本时,它通常不会引入您的别名。
您可以考虑在脚本中显式指定命令:
#!/bin/sh
oTools="/home/user/folder/oTools-cli"
for file in ./folder/*
do
${oTools} upload "${file}"
done
答案3
这是我通过 cron 运行脚本时遇到的问题。我不确定它是否适用于这里,但这里尝试在脚本的开头添加您的路径。就像是...
#!/bin/bash
PATH="/your/path"
...