我是bash的新用户,所以请耐心等待。 我正在尝试运行一个bash脚本,它将从命令行获取输入,然后运行一个c程序,其输出到其他c程序。 例如,在命令行我输入如下:
$ ./script.sh -flag file1 < file2
我将拥有的脚本:
./c_program -flag file1 < file2 | other_c_program
问题是,-flag
,file1
和file2
需要变量。
现在我知道对于-flag
和文件这很简单 - 我可以做到
FLAG=$1
FILE1=$2
./c_program $FLAG FILE1
我的问题是:有没有办法将脚本中的变量分配给file2
?
编辑: 程序要求脚本被称为 $ ./script.sh -flag file1&lt; file2的
答案 0 :(得分:1)
您可以完全按照它运行./c_program
,它将从父脚本继承stdin。它将从父进程读取的任何位置读取。
FLAG=$1
FILE1=$2
./c_program "$FLAG" "$FILE1" | other_c_program # `< file2' is implicit
此外,引用变量扩展是一个好主意。这样,如果$FILE1
包含空格或其他棘手的字符,脚本仍然可以正常工作。
答案 1 :(得分:1)
没有简单的方法来做你要求的事情。这是因为当你运行它时:
$ ./script.sh -flag file1 < file2
解释命令的shell将打开file2
进行读取并将其内容传递给script.sh
。您的脚本永远不会知道文件的名称是什么,因此无法将该名称存储为变量。但是,您可以这样调用脚本:
$ ./script.sh -flag file1 file2
然后它很简单 - 你已经知道如何获得file1
,file2
是相同的。