当前位置: 首页 > 面试题库 >

管道输出到bash功能

纪佐
2023-03-14
问题内容

我在bash脚本中具有简单的功能,我想将stdout作为输入传递给它。

jc_hms(){
  printf "$1"
}

我想以这种方式使用它。

var=`echo "teststring" | jc_hms`

当然,我使用了冗余函数echo和printf来简化问题,但是您明白了。现在,我收到一个“未找到”错误,我认为这意味着我的参数定界是错误的(“ $
1”部分)。有什么建议么?

最初,jc_hms函数的用法如下:

echo `jc_hms "teststring"` > //dev/tts/0

但我想将结果存储在变量中,以便在将其发送到串行端口之前先进行进一步处理。

编辑:所以要澄清一下,我不是想将内容打印到串行端口,如果要使用“ |”,我想连接到我的bash函数。竖线字符,我想知道是否可行。

编辑:好的,这是全部功能。

jc_hms(){
  hr=$(($1 / 3600))
  min=$(($1 / 60))
  sec=$(($1 % 60))

  printf "$hs:%02d:%02d" $min $sec
}

我正在使用该函数来形成字符串,这行代码

songplaytime=`echo $songtime | awk '{print S1 }'`
printstring="`jc_hms $songplaytime`"  #store resulting string in printstring

其中$ songtime是表示为“ playtime totaltime”的字符串,由空格分隔。

我希望我可以在一行中完成此操作,并在awk之后将其发送

printstring=`echo $songtime | awk '{print S1 }' | jc_hms`

像这样


问题答案:

为了回答您的实际问题,当外壳函数位于管道的接收端时,标准输入由该函数内部执行的第一个命令读取。由于printf是函数中的第一个也是唯一的命令,因此将忽略标准输入。有几种解决方法,包括使用read内置方法将标准输入读入变量,该变量可以传递给printf

jc_hms () {
    read foo
    hr=$(($foo / 3600))
    min=$(($foo / 60))
    sec=$(($foo % 60))
    printf "%d:%02d:%02d" "$hr" "$min" "$sec"
}

但是,由于您对管道的需求似乎取决于您对使用的感知需求awk,所以让我建议以下替代方法

printstring=$( jc_hms $songtime )

由于songtime由一对以空格分隔的数字组成,因此外壳程序对的值进行单词拆分songtime,并jc_hms看到两个单独的html" target="_blank">参数。这不需要更改的定义jc_hms,也不需要通过标准输入将任何内容通过管道传递给它。

如果您还有其他原因jc_hms需要阅读标准输入,请告诉我们。



 类似资料:
  • 问题内容: 本质上,我正在尝试替换: 为了避免使用硬盘驱动器,请在C ++中使用管道。这是我的代码: 我绝对可以确保上述字符串已正确初始化。但是,发生了两件事对我来说没有意义: (1)我正在执行的程序报告“输入文件为空”。由于我未使用“ <”调用程序,因此不应期望输入文件。相反,它应该期待键盘输入。此外,它应该阅读“ gulp_command”中包含的文本。 (2)程序的报告(通过标准输出提供)出

  • 问题内容: 我想在我的ipython Notebook中运行bash脚本,并将输出另存为python变量中的字符串,以进行进一步操作。基本上,我想将bash magic的输出传递给一个变量,例如,类似这样的输出: 问题答案: 怎么使用这个: 而不是魔术?使用该符号将以下命令作为shell命令运行,结果全部存储在中。要运行多个命令并收集所有命令的输出,只需组合一个快速的shell脚本即可。

  • null (它也应该与ffprobe和ffplay一起工作)

  • 问题内容: 我想在Linux操作系统上的C程序内执行以下操作: 使用syscall(或2)创建PIPE 使用exec()执行新流程 将流程的STDIN连接到先前创建的管道。 将流程的输出连接到另一个PIPE。 这样做的目的是为了性能目的而避免访问任何驱动器。 我知道使用PIPE系统调用创建管道非常简单,我可以使用popen为输入或输出目的创建管道。 但是您将如何针对输入和输出执行此操作? 问题答案

  • 问题内容: 有没有人有创建Java中的管道对象,任何好的建议 是 从Java既是一个InputStream和和OutputStream没有多重继承和两个流是抽象类,而不是接口? 基本需求是有一个可以传递给需要InputStream或OutputStream的对象的对象,该对象需要将一个线程的输出传递给另一个线程的输入。 问题答案: 看来这个问题的重点已被遗漏。如果我对您的理解正确,那么您希望一个对

  • 问题内容: 我是bash脚本的新手。我想将sql-query输出保存在变量中,但是 实际上,我必须使用以下命令为每个查询连接到mysql: 并希望将每个输出保存在单独的变量中 示例查询是: 到 谢谢你 问题答案: 从bash脚本中获取-从数据库中选择到变量中,您可以将查询结果读取到一个变量中。 例子 用法 是用于输出的bash命令。然后可以将其拆分为单独的变量: 您可以将这两个命令组合成一个命令: