如何使用 shell 脚本中的选项和参数启动自定义二进制文件



我不知何故无法弄清楚如何使用 shell 脚本中的参数启动自编写的程序。如果我在父文件夹包含二进制文件的文件夹中,那么我可以启动程序

$ ../binary --opt1 arg1 --opt2 arg2

现在,假设参数和选项列在当前文件夹的文件参数中。

参数.txt:

--opt1 arg1 --opt2 arg2

如果我尝试从当前文件夹中的 shell 脚本执行二进制文件,例如:

$ ./script.sh args.txt

script.sh:

#!/bin/bash
if [ $# != 1 ]
then
exit 1;
fi
params=$(<"$1")
../binary "$params"
# ../binary <<<"$params" doesn't work either.

我怎样才能做到这一点?

编辑(更新脚本):

#!/bin/bash
if [ $# != 1 ]
then
exit 1;
fi
params=$(<"$1")
START=$(date +%s)
../binary "$params"
# ../binary <<<"$params" doesn't work either.
END=$(date +%s)                                                                                                                             
DIFF=$(( $END - $START ))                                                                                   
echo "Test took $DIFF seconds"

使用命令替换:

$ ./script.sh args.txt

./script.sh 的内容

#!/bin/bash
../binary $(< "$1")

命令替换

命令替换允许命令的输出替换命令名称。 有两种形式:

$(command)
or
`command`

Bash 通过执行命令并将命令替换替换为命令的标准输出来执行扩展,并删除任何尾随换行符。 嵌入的换行符不会被删除,但可能会在分词期间删除。 命令替换$(cat file)可以替换为等效但更快的$(< file)

当使用旧式反引号形式的替换时,反斜杠保留其字面含义,除非后跟$、' 或。 第一个前面没有反斜杠的反引号将终止命令替换。使用$(command)窗体时,括号之间的所有字符构成命令;没有一个得到特殊对待。

命令替换可以嵌套。若要在使用反引号形式时嵌套,请使用反斜杠转义内部反引号。如果替换出现在双引号内,则不会对结果执行单词拆分和路径名扩展。

最新更新