Linux 在bash中使用可分辨行符号#提取子数组
我将一些命令行存储在一个文本文件中,并使用可分辨的行符号将它们分成不同的组,比如第一组为#step1,第二组为#step2,等等。我的问题是如何使用#step*作为输入参数来提取每个组并执行每个命令行 步骤文本文件:Linux 在bash中使用可分辨行符号#提取子数组,linux,bash,shell,Linux,Bash,Shell,我将一些命令行存储在一个文本文件中,并使用可分辨的行符号将它们分成不同的组,比如第一组为#step1,第二组为#step2,等等。我的问题是如何使用#step*作为输入参数来提取每个组并执行每个命令行 步骤文本文件: #step1 command line 1 command line 2 command line 3 ... #step2 command line 4 command line 5 command line 6 ... 如何在我的代码上下文中的某个地方创建函数,可以执行以下操
#step1
command line 1
command line 2
command line 3
...
#step2
command line 4
command line 5
command line 6
...
如何在我的代码上下文中的某个地方创建函数,可以执行以下操作:
execSteps "#step1"
或者是否有其他方法来组织我的steps文本文件
有什么想法吗
多谢各位 一种方法:
getSteps() {
local running=0
while read -r line; do
if (( running )); then
if [[ $line = "#"* ]]; then
return
else
printf '%s\n' "$line"
fi
else
[[ $line = "#"$1 ]] && running=1
fi
done <stepFile
}
execSteps() {
getSteps "$@" | sh -
}
getSteps(){
本地运行=0
当读取-r行时;执行
如果((运行));那么
如果[[$line=“#”*];则
返回
其他的
printf'%s\n'$行
fi
其他的
[[$line=“#“$1]]&&running=1
fi
完成听起来您只是想定义一个shell“模块”。将其另存为mymodule
:
step1 () {
command line 1
command line 2
command line 3
}
step2 () {
command line 4
command line 5
command line 6
}
要使用它,只需从脚本中获取它的源代码,并调用所需的函数
. mymodule
# Run step 1
step1
# Run step 2
这根本不是一个数组,除非你想将所有步骤存储在内存中,而不是每次都通过文件进行解析。这…实际上是合理的,但无论是否这样做,它都不是规范的一部分。我想这样做的原因是每次在我的计算机上安装Gentoo Linux的新版本时,包名保持不变,但使用标志总是会更改。我决定将要安装的包名存储到文本文件中,并将它们分成不同的组,这样我就可以接受使用标志作为输入参数,而不必担心过程,并一次又一次地键入“emerge packagename”。即使我已经存储了整个过程在一个可执行脚本文件中,当新版本Gentoo stage和portage可用时,更新使用标志是很无聊的。其他新兴软件包是一些命令行,如“cp”、“mkdir”、“rc update”,它们也必须在这些新兴步骤中混合使用,这意味着它们被分成不同的步骤,作为emer存储在一个文本文件中没有。此线程主要是关于如何处理这些分组的命令行。Hmm。如果要在当前shell中执行这些组,可能需要eval“$(getSteps“$@”)
而不是使用getSteps“$@”|sh-
,它在一个单独的子shell中执行这些步骤。如果这些步骤不在同一个shell中,您能建议会发生什么情况吗?我使用chroot
远程运行emerge-package
。这有关系吗?非常感谢您,Charles!它对我非常有用。嗨,Charles,如果我想进一步,sa在函数getSteps()的第行printf“%s\n'$line”
中,将此步骤分为两个子步骤,子步骤1:executeemerge——假装$line(packagename)
,手动收集使用标志,并设置make.conf,子步骤2:executeemerge$line(packagename)
。我进一步的问题是如何在这个while循环中执行emerge?不要担心其他事情。再次感谢你。上面的评论过于密集,无法明确理解。我建议问一个新问题,专门针对你遇到问题的地方,并将你确实理解的部分考虑在内。@Taowan,请添加你用你的扩展版代码来回答自己的问题——你建议的编辑太过宽泛,无法包含在这里,但我很乐意将其作为一个单独的答案进行补充。(是的,我将所有评论都视为标签;这是有意的,因为这个问题不太清楚什么是标签,什么不是标签)@ MikeWise,请考虑对您批准的编辑建议更加谨慎。您批准的更改建议代码具有大量与实际问题无关的功能,并且它所做的其他调整与未声明的(而不是明确的)要求有关。