重用`apt update`和`apt upgrade`命令的`apt up`部分,只需一行就能按顺序执行
如何重用apt update
和apt upgrade
命令的apt up
部分,只需一行就可以执行这两个命令而不需要别名。
类似于: apt up{date,grade}
。
简单的方法(也更有效)是via for循环(在一条线上,但为了清楚起见,它在多行中显示):
for i in {date,grade}; do apt up${i} done
聪明的方法是在~/.bashrc
为这两个命令创建一个别名,而忘记重新输入它:
alias upgrade=' sudo apt update && sudo apt upgrade'
精心设计的方法是这样做:
$ echo sudo" "apt" "up{"date","grade"}" && " : sudo apt update && sudo apt upgrade && :
看看发生了什么? 我们正在构建一个由shell运行的有效文本字符串。 现在你需要做的就是使用eval
而不是echo
。 但是在shell脚本中通常不建议使用eval
,并且此命令比for循环更复杂且不可移植。 没有eval的主题变化(到目前为止最短,但由于管道和多个命令echo
而效率不高,两个apt
, sudo
和sh
很多分叉):
$ echo "apt "{update,upgrade}";"|sudo sh
我们也可以使用set
将所需的序列转换为位置参数,并使用$1
和$2
args执行apt
:
$ set {update,upgrade}; echo apt $1 && echo apt $2 apt update apt upgrade
或者再次使用for循环,因为如果没有在for variable (sequence)
指定序列for variable (sequence)
,它默认处理位置参数
$ set {update,upgrade} ; for i; do echo apt $i ;done apt update apt upgrade
使用set
是一种非常常见的技术,我在使用shell的专业人员中看到了很多,并且有充分的理由 – 这是非常便携的,可以在没有数组或{a,b,c}
扩展的/bin/sh
中工作。 所以POSIX-ly便携式方式将set update upgrade ; for i; do echo apt $i ;done
set update upgrade ; for i; do echo apt $i ;done
set update upgrade ; for i; do echo apt $i ;done
。 此外,这应该是有效的。
或者我们可以去while
循环路线:
$ echo {date,$'\n',grade}|while read i;do echo apt up${i}; done apt update apt upgrade
当然记得在没有echo
的情况下运行它来执行实际的命令执行
您还可以使用bash 历史记录扩展来获取当前命令行的一部分并进行修改:
$ apt update; !#:s/date/grade apt update; apt upgrade; Reading package lists... Done ...
-
!#
是当前行 -
:s/date/grade
是一个修饰符,用date
替换date
使用xargs
而不是for
另一个简单选项:
echo up{dat,grad}e | xargs -n1 apt
测试:
$ echo up{dat,grad}e | xargs -n1 echo apt apt update apt upgrade
但是,我更喜欢像Sergiy这样的shell别名,因为这些“简单”的方法并不简单,实际上并不实用。
创建一个这样的函数:
repeat() { for suffix in "${@:2}"; do eval "$1""$suffix"; done }
然后你可以repeat 'apt up' {date,grade}
。 这有利于可以重复使用完全不同的命令,虽然它不会为你节省任何打字。
我当然同意其他一些答案,这样的事情可能更有用:
alias apt-up='apt update && apt upgrade'
在〜/ .bashrc中添加以下内容
alias doit='echo; kill $( ps -eafww|grep update-manager|grep -v grep | grep update-manager | tr -s " " |cut -d" " -f2 ) > /dev/null 2>&1; echo "sudo apt-get update && sudo apt-get dist-upgrade && [ -f /var/run/reboot-required ] && echo && echo reboot required && echo";echo;sudo apt-get update && sudo apt-get dist-upgrade && [ -f /var/run/reboot-required ] && echo && echo reboot required && echo '
然后执行更新,然后进行升级,然后根据需要使用打印件告诉您机器想要重新启动问题
doit
对于还包括一些包清理的东西使用这一个
alias doit='echo; kill $( ps -eafww|grep update-manager|grep -v grep | grep update-manager | tr -s " " |cut -d" " -f2 ) > /dev/null 2>&1; sudo apt-get update && echo "sudo apt-get -f install -y " && sudo apt-get -f install -y && echo "sudo apt-get -o Dpkg::Options::="--force-confnew" -yy dist-upgrade -yq" && sudo apt-get -o Dpkg::Options::="--force-confnew" -yy dist-upgrade -yq && echo " df -h" && df -h && echo "sudo apt-get autoremove -yq " && sudo apt-get autoremove -yq && echo "sudo apt-get autoclean -y" && sudo apt-get autoclean -y && echo '
我使用以下键序列重新使用命令的apt-get up
部分:
向上箭头 退 格 退 格 退 格 键 退 格 键
- 在Ubuntu 16.10中添加存储库时出错(keyserver接收失败)
- “libstdc ++。so.6:无法打开共享对象文件:没有这样的文件或目录”
- 找到(并重新安装)包含损坏文件的包(不破坏任何内容)
- 由于shared-mime-info.postinst错误,sudo apt-get升级失败
- `usermod:user’mahmoud’不存在dpkg:error handlingkismet( – configure)`安装kismet时出错
- php5-mysql安装,错误404未找到
- 如何建议包和额外包和新包之间有什么区别?
- 使用apt-get install时出现dpkg错误
- 如何使用GUI删除PPA?