我有一个程序,它返回一个文件名列表.我需要将这些文件的内容传递给另一个程序.
我知道如何使用cat传递内容:
cat file1 file2 file3 | some_program
Run Code Online (Sandbox Code Playgroud)
我想做的是:
list=`get_file_list`
cat ${list} | some_program
Run Code Online (Sandbox Code Playgroud)
虽然执行上述操作只会传递列表变量的内容,而不是文件的内容.
我写了两个脚本。一种是myscipt1.sh读取整数序列(作为参数提供)并报告最终数字:
[user@pc user] ./myscript1.sh 34 45 67 234
[user@pc user] 1200
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,脚本返回1200. 另一个脚本myscript2.sh采用字符串作为输入并返回整数序列:
[user@pc user] ./myscript2.sh a string to provide
[user@pc user] 364 465 786 34 22 1
Run Code Online (Sandbox Code Playgroud)
我想myscript1.sh通过传递结果来调用myscript2.sh,所以我尝试了:
[user@pc user] ./myscript2.sh my_string | ./myscript1.sh
Run Code Online (Sandbox Code Playgroud)
但我没有运气myscript1.sh(对传递的参数数量进行检查,没有传递任何参数退出)报告没有传递任何参数。
当我在我编写的脚本中使用管道时,Bash 似乎出现了问题。怎么做?
我正在学习如何在bash中使用I/O重定向,并尝试使用管道的一些示例:
pwd | say
ls -l | grep "staff" > out.txt
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用两者pwd并open使用管道重定向时,命令失败,我只是收到open使用情况.
我正在尝试的是: pwd | open
从bash打开当前目录的正确方法是什么?
我有这两步bash命令:
L=`wc -l testfile | cut -d' ' -f1`
myprogram testfile $L testfile.out
Run Code Online (Sandbox Code Playgroud)
长话短说,myprogram需要将行数作为输入.
我想把它组合成一行.
这并没有工作,因为使用的是重定向|到-通行证标准输出流作为一个文件,而不是一个字符串.
wc -l testfile | cut -d' ' -f1 | myprogram testfile - testfile.out
Run Code Online (Sandbox Code Playgroud)
有没有办法将它组合成一行?