小编Evg*_*gin的帖子

测试后如何保持上次退出状态

是否可以$?在测试后保持最后一个命令退出状态 ( ) 不变?

例如,我想做:

command -p sudo ...
[ $? -ne 1 ] && exit $?
Run Code Online (Sandbox Code Playgroud)

最后一个exit $?应该返回 sudo 退出状态,但它总是返回0(测试的退出代码)。

没有临时变量可以做到这一点吗?

另一个进一步澄清的例子:

 spd-say "$@"
 [ $? -ne 127 ] && exit $?
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我只想在找到第一个命令时退出(退出代码 != 127)。我想用实际的spd-say退出代码退出(可能不是 0)。

编辑:我忘了提到我更喜欢 POSIX-complaint 解决方案以获得更好的可移植性。

我在脚本中使用这个构造,我想为相同的命令提供替代方案。例如,请参阅我的crc32 脚本

临时变量的问题在于它们可能会影响其他变量,并且为了避免必须使用长名称,这对代码可读性不利。

shell-script variable exit-status

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

如何告诉 checkinstall 只创建包文件,而不是安装?

我怎么知道checkinstall只创建 deb 包文件,而不是安装?


checkinstall --install=no,它无法在年底,因没有权限做一些事情。是否真的需要root才能在不安装的情况下创建deb文件?

$ checkinstall --install=no

checkinstall 1.6.2, Copyright 2009 Felipe Eduardo Sanchez Diaz Duran
           This software is released under the GNU GPL.



*****************************************
**** Debian package creation selected ***
*****************************************

This package will be built according to these values: 

0 -  Maintainer: [ tim@admin ]
1 -  Summary: [ wine 1.6.2 built from source Oct 3, 2014 ]
2 -  Name:    [ wine ]
3 -  Version: [ 1.6.2 ]
4 -  Release: …
Run Code Online (Sandbox Code Playgroud)

software-installation checkinstall

6
推荐指数
2
解决办法
7822
查看次数

从文件中删除行直到模式,除非模式不存在

我正在尝试使用类似sedawk执行以下操作编写过滤器:

  • 如果输入中不存在给定模式,则将整个输入复制到输出
  • 如果输入中存在模式,则仅将第一次出现后的行复制到输出中

这恰好适用于“git clean”过滤器,但这可能并不重要。重要的方面是这需要作为过滤器来实现,因为输入是在 stdin 上提供的。

我知道如何使用sed删除模式的行,例如。1,/pattern/d但是如果/pattern/在任何地方都不匹配,则会删除整个输入。

我可以想象编写一个完整的 shell 脚本来创建一个临时文件,执行某个操作grep -q或其他操作,然后决定如何处理输入。如果可能的话,我更愿意在不乱创建临时文件的情况下执行此操作。这需要高效,因为 git 可能会频繁调用它。

sed awk text-processing filter

6
推荐指数
2
解决办法
2690
查看次数

APT 如何处理同名的不同程序?

我决定最终学习 vi 并且当我这样做时,我意识到 vi 的行为不像我预期的那样。我从另一篇文章中了解到,这是因为在 Ubuntu 上,默认情况下安装了 vim-tiny。

在我得知我选择使用以下命令安装完整版 vim 后:

sudo apt-get install vim
Run Code Online (Sandbox Code Playgroud)

在我这样做之后,我开始对一些事情感到好奇:

  1. 我注意到 vi 和 vim 命令现在与完整版的 vim 而不是 vim-tiny 相关联。这是怎么发生的?(即名称查找如何工作?)
  2. 如何显式执行 vim-tiny 或full vim?
  3. Linux/Ubuntu/apt 如何管理具有名称冲突的库和可执行文件?不同的版本怎么样?

我正在使用 Ubuntu Server 12.04 LTS。

ubuntu apt package-management alternatives

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

在包含 update-alternatives 的目录中安装手册页

在 Debian 系统上使用update-alternatives (8) 可以将手册页添加为某个主替代方案下的从属手册页。

例如,以下命令安装替代手册页tclsh.1以及tclsh.

$ update-alternatives --install /usr/bin/tclsh tclsh /usr/bin/tclsh8.6.0 100 \
    --slave /usr/share/man/man1/tclsh.1 tclsh.1 /usr/share/man/man1/tclsh8.6.0.1
Run Code Online (Sandbox Code Playgroud)

但是,如果我没有一个而是整个目录,其中包含我想要安装的手册页作为替代方案,该怎么办?如何在不添加数百个奴隶的情况下添加这些?

我正在使用 Ubuntu 12.04,并尝试安装我自己的Tcl 8.6(无 ActiveState)。它有 800 多个手册页/opt/tcl8.6.0/man/man[13n]

man ubuntu debian alternatives

5
推荐指数
0
解决办法
808
查看次数

匹配行首与那里的东西?

我想匹配该行包含某些内容的行的开头。

Perl/Sed 中的命令

's/^.?/\section{}/g'
Run Code Online (Sandbox Code Playgroud)

但这里的问题是它也替换了句子的第一个字符。

你怎么能在行的开头添加一些非空行的东西?

sed perl text-processing regular-expression

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