对于已经使用程序输出的半成品脚本,我还需要用于传递到脚本的程序的名称和参数。
所以我这样运行它:
yay something | ./myscript
现在,我需要将“是的东西”存储到变量中。
有一种方法可以通过使用set -o history -o histexpand
和echo !!
或echo $0
来获取先前运行的命令或当前命令,但这不包括我在管道之前写的内容。
也许您会建议将程序的名称及其参数作为参数传递给我的脚本,然后在其中运行它,但我不希望这样做(pass a command as an argument to bash script)。
答案 0 :(得分:0)
更新后的解决方案(以下旧有):
#!/bin/bash -i
#get processes
processes=$(> >(ps -f))
echo beginning:
echo "$processes"
#filter bin/bash -i
pac=$(echo "$processes" | sed '1,/bin\/bash -i/!d')
pac=$(echo "$pac" | tail -2 | head -1)
#kill
delete=$(echo $pac | grep -oP "(?<=$USER\s)\w+")
pac=$(echo "$pac" | grep -o -P '(?<=00:00:00).*(?=)')
echo "$delete"
kill -9 "$delete"
#print
echo " "
echo end:
echo "${pac:1}"
注意:当您使用echo,man或cat时,$ pac将为空。
旧文本:
感谢查尔斯所做的巨大努力以及他的联系最终使我进入processes=$(> >(ps -f))
。
这是一个工作示例。您可以例如与vi test | ./testprocesses
(或yay或trizen之类的nano或包装助手一起使用,但不适用于echo,man或cat):
#!/bin/bash -i
#get processes
processes=$(> >(ps -f))
echo beginning:
echo $processes
#filter
pac=$(echo $processes | grep -o -P '(?<=CM).*(?=testprocesses)' | grep -o -P '(?<=D).*(?=testprocesses)' | grep -o -P "(?<=00:00:00).*(?=$USER)")
#kill
delete=$(echo $pac | grep -oP "(?<=$USER\s)\w+")
pac=$(echo $pac | grep -o -P '(?<=00:00:00).*(?=)')
kill -9 $delete
#print
echo " "
echo end:
echo $pac
kill部分是杀死vi实例所必需的,否则它将继续运行并最终干扰脚本的未来执行。