我无法弄清楚如何使用shell脚本中的参数启动自编程序。如果我在父文件夹包含二进制文件的文件夹中,那么我可以用
启动该程序$ ../binary --opt1 arg1 --opt2 arg2
现在,假设参数和选项列在当前文件夹的文件args中。
args.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"
答案 0 :(得分:0)
使用命令替换:
$ ./script.sh args.txt
./script.sh的内容
#!/bin/bash
../binary $(< "$1")
命令替换
命令替换允许输出命令来替换命令名称。有两种形式:
$(command) or `command`
Bash通过执行命令并用命令的标准输出替换命令替换来执行扩展,删除任何尾随换行符。嵌入的换行不会被删除,但在分词时可能会被删除。命令替换
$(cat file)
可以替换为等效但更快$(< file)
。当使用旧式反引号替换形式时,反斜杠保留其字面含义,除非后跟
$
,`或\
。第一个反引号前面没有反斜杠会终止命令替换。使用$(command)
表单时,括号内的所有字符组成命令;没有人受到特别对待。命令替换可以嵌套。要在使用反引号形式时进行嵌套,请使用反斜杠转义内部反引号。如果替换出现在双引号内,则不会对结果执行单词拆分和路径名扩展。