是否可以$?
在测试后保持最后一个命令退出状态 ( ) 不变?
例如,我想做:
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 脚本。
临时变量的问题在于它们可能会影响其他变量,并且为了避免必须使用长名称,这对代码可读性不利。
我怎么知道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) 我正在尝试使用类似sed
或awk
执行以下操作编写过滤器:
这恰好适用于“git clean”过滤器,但这可能并不重要。重要的方面是这需要作为过滤器来实现,因为输入是在 stdin 上提供的。
我知道如何使用sed
删除模式的行,例如。1,/pattern/d
但是如果/pattern/
在任何地方都不匹配,则会删除整个输入。
我可以想象编写一个完整的 shell 脚本来创建一个临时文件,执行某个操作grep -q
或其他操作,然后决定如何处理输入。如果可能的话,我更愿意在不乱创建临时文件的情况下执行此操作。这需要高效,因为 git 可能会频繁调用它。
我决定最终学习 vi 并且当我这样做时,我意识到 vi 的行为不像我预期的那样。我从另一篇文章中了解到,这是因为在 Ubuntu 上,默认情况下安装了 vim-tiny。
在我得知我选择使用以下命令安装完整版 vim 后:
sudo apt-get install vim
Run Code Online (Sandbox Code Playgroud)
在我这样做之后,我开始对一些事情感到好奇:
我正在使用 Ubuntu Server 12.04 LTS。
在 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]
。
我想匹配该行包含某些内容的行的开头。
Perl/Sed 中的命令
's/^.?/\section{}/g'
Run Code Online (Sandbox Code Playgroud)
但这里的问题是它也替换了句子的第一个字符。
你怎么能在行的开头添加一些非空行的东西?
alternatives ×2
sed ×2
ubuntu ×2
apt ×1
awk ×1
checkinstall ×1
debian ×1
exit-status ×1
filter ×1
man ×1
perl ×1
shell-script ×1
variable ×1