小编Doc*_*ger的帖子

从“grub 救援>”崩溃中恢复

最初发布到 AskUbuntu.com ...

AskUbuntu 采用了关闭有关 EOL(生命周期结束)版本问题的策略。还有一个声音队伍来删除它们。为了防止可能丢失这个热门问题(迄今为止有 342335 次浏览),我在此处放置了一个修订版。--- 文档打捞者

“经典”系统...

  • Puppy Linux 5.2.8 (Lucid) 基于 Ubuntu 10.04 (Lucid Lynx)
  • GRUB 2引导加载程序

GRUB 2将许多*.mod文件(内核模块)放在/boot/grub. 删除这些文件(认为它们是放错位置的声音文件)导致重新启动失败并提示grub rescue>.

在这种情况下如何恢复?

ubuntu boot-loader grub2 busybox

29
推荐指数
2
解决办法
35万
查看次数

bash:如果子进程失败,避免获取父进程的 PID

(以前的标题 - bash:在后台运行命令并捕获 pid)

注意这不是另一个问题的 [DUPLICATE],因为它解决了 bash 的意外行为,其中子$!进程启动失败,比如由于“找不到命令”,可以将设置保留为调用进程的 pid 而不是失败子进程的 pid 或 "" (null)。-- 文档打捞者

我正在编写 bash 4.1 脚本...

  • 想在后台运行另一个脚本(或内部函数)...
  • 并在前台脚本的变量中捕获该后台作业的 pid ...
  • 如果作业未启动,则变量应为空值(即“”)。

如果后台工作总是开始,那么这些工作中的任何一个都可以工作......

cmd &
VAR=$!

or...

( cmd & ); VAR=$!
Run Code Online (Sandbox Code Playgroud)

如果cmd运行,最后启动的命令的 pid ($!) 将是我们想要的,而 $VAR 将是正确的。

但是,如果cmd没有启动,$VAR 将是启动之前的最后一个命令的 pid,这可能是前台脚本本身的 pid。由于我需要 pidcmd以便稍后在某些条件下终止进程,因此可能无法获得错误的 pid。

我真正需要的是只有在后台作业运行时才更改 VAR。像语法不正确的东西......

VAR=
( cmd & );  && VAR=$!
Run Code Online (Sandbox Code Playgroud)

实施方案

评论和 Joseph R 的回答非常有帮助。为了任何有类似问题的人的利益......

以下 bash 函数standby在后台运行 GtkDialog脚本。在一个本身在子进程中运行的函数内部,似乎提供了隔离我需要避免获取调用脚本的 PID 而不是脚本的 PIDstandby …

bash process background-process

21
推荐指数
1
解决办法
5万
查看次数

Gawk:将数组传递给函数

坚持使用 GNU awk 3.1.6 并认为我已经解决了它的数组错误,但在 600 行 awk 程序中仍然存在范围问题。需要验证对 awk 中数组范围的理解才能找到我的错误。

鉴于这个说明性的 awk 代码......

function foo(ga) {
  ga[1] = "global result"
}

garray[1] = "global"
foo(garray)

print garray[1]
Run Code Online (Sandbox Code Playgroud)

将打印...

global result
Run Code Online (Sandbox Code Playgroud)

由于数组总是通过引用传递给函数,因此所有数组总是全局的。无法创建本地数组。这样对吗?一直无法找到明确说明这一点的文档。

由于我正在调试,并且 3.1.6 本身在这方面有已知的错误,我试图确定 awk 的错误从哪里停止,我的错误从哪里开始。

补充:为什么 ga[] 在函数内部工作呢?

首先,将数组传递给函数 withfoo(ga)实际上是不必要的。只需garray[]在函数内部访问它。然而,这样做并没有可衡量的性能损失,它有助于调试和错误报告。

在使用中foo(ga)ga[]是全局数组的同义词garray[]。它不是 的本地副本garray[],而是简单的指向 的指针garray[],就像符号链接是指向文件的指针一样,因此可以使用多个名称访问同一个文件(或数组)。

补充:澄清格伦杰克曼的回答

虽然在函数外部创建的数组对函数来说是全局的,并且可以传递给它或只是在函数内部被引用,但函数内部创建的数组确实对函数保持局部并且在函数外部不可见。修改杰克曼先生的例子说明了这一点......

awk '
    function bar(x,y) {
      split("hello world", y)
      print "x[1] inside: …
Run Code Online (Sandbox Code Playgroud)

array awk function

10
推荐指数
1
解决办法
4192
查看次数

bash:访问陷阱函数中的函数调用堆栈

处理 bash 函数调用堆栈跟踪...

脚本捕获错误并运行callStack()函数。但是在捕获时,它总是显示callStack()函数本身的调用堆栈,而不是发生陷阱的函数,如...

/share/sbin/zimdialog: line 647: status: command not found
    Function call stack ( command.function() ) ...
      /share/sbin/zimdialog.main()
        /share/sbin/include.callStack()
Run Code Online (Sandbox Code Playgroud)

希望获得包含errantFunction()类似内容的堆栈跟踪...

/share/sbin/zimdialog: line 647: status: command not found
    Function call stack ( command.function() ) ...
      /share/sbin/zimdialog.main()
        /share/sbin/zimdialog.errantFunction()
          /share/sbin/include.callStack()
Run Code Online (Sandbox Code Playgroud)

陷阱被编码为...

trap callStack HUP INT QUIT TERM ERR
Run Code Online (Sandbox Code Playgroud)

callStack()函数被编码为...

function callStack () {
  { isNotNull "$1" && isHelp "$1"; } && {
    helpShow 'callStack
    Diagnostics regarding where the call to this function came from' …
Run Code Online (Sandbox Code Playgroud)

bash function trap error-handling

8
推荐指数
1
解决办法
3229
查看次数

分隔符和字尾之间的 ERE 正则表达式到 split() 字符串

我正在使用一个很长的gawk 3.1.6脚本来将 Zim markdown 文本复杂地转换为 GtkDialog 代码,并且遇到了以下问题......

示例 ASCII 输入...

[[link|label label]] [[link]] @tag more text
Run Code Online (Sandbox Code Playgroud)

命令行测试以找到正确的正则表达式...

re="[][][][]"; echo '[[link|label label]] [[link]] @tag more text' | awk -v RE=$re '{split($0,A,RE); printf "\n(" A[1] ")(" A[2] ")(" A[3] ")(" A[4] ")(" A[5] ")(" A[6] ")(" A[7] ")(" A[8] ")\n"}'
Run Code Online (Sandbox Code Playgroud)

正则表达式"[][][][]"很好地分离了两个超链接形式,所以这不是问题。

如果我们能把它分成两部分会更容易理解—— "[][]""[][]"。我们正在寻找要拆分的“[[”或“]]”。类中字符的顺序必须颠倒以符合类元字符限制。

问题还在于将“@tag”拆分为“tag”。“标签”可以是任何字母数字文本,后跟空格或字符串结尾。

执行上面的命令行测试会产生......

()(link|label label)( )(link)( @tag more text)()()
Run Code Online (Sandbox Code Playgroud)

但我需要它来屈服......

()(link|label label)( )(link)( )(tag)(more text)
Run Code Online (Sandbox Code Playgroud)

我尝试了许多正则表达式字符串,例如"[][][][]|@[[:alnum:]]*"删除整个单词并产生......

()(link|label label)( )(link)( )( more …
Run Code Online (Sandbox Code Playgroud)

awk regular-expression split gawk

5
推荐指数
1
解决办法
2243
查看次数

使用“@”作为目录名

尽管 Unix/Linux 在技术上允许文件和目录名称中的任何字符,但由于 O/S 广泛使用标点符号作为分隔符等,使用标点符号几乎总是充满危险。

也就是说,我正在尝试一些可以从只命名单个字符@(at 符号)的目录中受益的东西 。

我使用了几天没有遇到任何问题,但可能忽略了一些问题。

是否有命令或情况可以让这再次咬我?

directory filenames

4
推荐指数
1
解决办法
420
查看次数