如何自动更新Atom编辑器?


51

Ubuntu尚不支持自动更新Atom功能。从他们的GitHub存储库中:

当前仅提供64位版本。

从Atom版本页面下载atom-amd64.deb。在下载的软件包上运行sudo dpkg --install atomic-amd64.deb。使用已安装的atom命令启动Atom。Linux版本当前不会自动更新,因此您需要重复这些步骤以升级到将来的版本。

我尝试使用Webupd8 PPA,但这对我不起作用。


1
PPA有什么问题?
2015年

@AB我认为现在还可以,没有时间测试它,并且我有一段时间没有使用atom了,但是那时PPA并没有更新我的版本。
伊戈尔五世

我可能不应该回答旧问题。:\
AB

1
您的回答很好,可以帮助我解决类似的问题。:)
Igor V.

Answers:


71

TL; DR如果您不想使用PPA,则可以使用脚本下载并通过cron自动安装。


  1. 创建一个新文件 atom-auto-update

    sudo nano /usr/local/bin/atom-auto-update
    
  2. 添加以下行

    #!/bin/bash
    wget -q https://github.com/atom/atom/releases/latest -O /tmp/latest
    wget -q $(awk -F '[<>]' '/href=".*atom-amd64.deb/ {match($0,"href=\"(.*.deb)\"",a); print "https://github.com/" a[1]} ' /tmp/latest) -O /tmp/atom-amd64.deb
    dpkg -i /tmp/atom-amd64.deb
    
  3. 保存文件并使其可执行

    sudo chmod +x /usr/local/bin/atom-auto-update
    
  4. 测试脚本

    sudo atom-auto-update
    
  5. 为脚本创建一个cronjob

    sudo crontab -e
    
  6. 添加此行

    例如:每周上午10点

    0 10 * * 1 /usr/local/bin/atom-auto-update
    

    例如:每天上午10点

    0 10 * * * /usr/local/bin/atom-auto-update      
    

说明

  • wget -q https://github.com/atom/atom/releases/latest -O /tmp/latest

    下载具有最新版本信息的站点

  • wget -q $(awk -F '[<>]' '/href=".*atom-amd64.deb/ {match($0,"href=\"(.*.deb)\"",a); print "https://github.com/" a[1]} ' /tmp/latest) -O /tmp/atom-amd64.deb

    1. … awk -F '[<>]' '/href=".*atom-amd64.deb/ {match($0,"href=\"(.*.deb)\"",a); print "https://github.com/" a[1]} ' /tmp/latest …

      提取下载链接

    2. wget -q $( … ) -O /tmp/atom-amd64.deb

      下载DEB文件

  • dpkg -i /tmp/atom-amd64.deb

    安装DEB文件


1
编辑和支持!;-)
Fabby 2015年

2
awk:第1行:wget或附近的语法错误,wget:URL manquante利用率:wget [OPTION] ... [URL] ...
Rachid Oussanaa

如果以这种方式更新,是否必须打包树脂包?
becko '16

1
这也给了我一个语法错误,您尝试从HTML提取URL。从那时起,他们可能会更改HTML。这对我有用(不完整):cat /tmp/latest | grep '.deb' | grep 'href=' | cut -d '"' -f 2
Dean Rather

2
对于那些面临awk语法错误的用户,这是我的第三行:wget https://github.com$(cat /tmp/latest | grep -o -E 'href=".*atom-amd64.deb' | cut -d'"' -f2) -O /tmp/atom-amd64.deb
Felipe Elia

20

AB的答案是一个很好的解决方案!我在bash代码中添加了显示进度条选项以通知进度: 

#!/bin/bash
wget -q https://github.com/atom/atom/releases/latest -O /tmp/latest
wget --progress=bar -q 'https://github.com'$(cat /tmp/latest | grep -o -E 'href="([^"#]+)atom-amd64.deb"' | cut -d'"' -f2 | sort | uniq) -O /tmp/atom-amd64.deb -q --show-progress
dpkg -i /tmp/atom-amd64.deb

6

作为先前的修改步骤,让我们在启动时进行更新,以下是步骤

  1. 通过运行以下命令创建文件:

    sudo nano /usr/local/bin/atom-update  
    

然后输入以下脚本(使用文本编辑器(如“ gedit”或“ mousepad”)代替“ nano”更为方便),然后将其保存。

#!/bin/bash    
wget -q https://github.com/atom/atom/releases/latest -O /tmp/latest
MATCHEDROW=$(awk -F '[<>]' '/href=".*atom-amd64.deb/' /tmp/latest)
LATEST=$(echo $MATCHEDROW | grep -o -P '(?<=href=").*(?=" rel)')
VER_LATEST=$(echo $MATCHEDROW | rev | cut -d"/" -f 2 | rev | sed 's/v//g')
VER_INST=$(dpkg -l atom | tail -n1 | tr -s ' ' | cut -d" " -f 3)

if [ "$VER_LATEST" != "$VER_INST" ]; then
   wget --progress=bar -q "https://github.com/$LATEST" -O /tmp/atom-amd64.deb --show-progress
   dpkg -i /tmp/atom-amd64.deb
   echo "Atom has been update from $VER_LATEST to $VER_INST"
   logger -t atom-update "Atom has been update from $VER_INST to $VER_LATEST"
else
   echo "Atom version $VER_INST is the latest version, no update require"
   logger -t atom-update "Atom version $VER_INST is the latest version, no update require"
fi
  1. 使文件可执行:

    sudo chmod +x /usr/local/bin/atom-update
    
  2. 现在,您可以通过键入以下命令来手动更新Atom:

    sudo atom-update
    
  3. 登录到您的根目录,然后在命令之前将以下行添加到/etc/rc.localsudo nano /etc/rc.localexit 0

    /usr/local/bin/atom-update  
    

每次您打开PC时,这都将使atom更新脚本执行。

  1. 要检查脚本在启动时是否已正确运行,请重新启动PC并打开终端,然后键入:

    cat /var/log/syslog | grep 'atom.*'  
    

您将看到相应的日志消息。


它不再工作了。你能更新一下吗?
有趣的诺克斯

如果这真的升级了我的Atom,我感到困惑,我得到Atom已从1.23.3更新到1.19.7。如果Atom.io 下载最新的最新版本sudo dpkg -i atom-amd64.deb那么我将获得`Unpacking atom(1.23.3)over(1.19.7)。
Pablo A

3

基于AB的答案,我添加了版本检查功能以避免不必要的下载/安装:

#!/bin/bash

TMP_DIR=$(mktemp -d)

TMP_LATEST="${TMP_DIR}/latest"
TMP_FILE="${TMP_DIR}/atom-amd64.deb"

wget -q https://github.com/atom/atom/releases/latest -O ${TMP_LATEST}
LATEST=$(awk -F '[<>]' '/href=".*atom-amd64.deb/ {match($0,"href=\"(.*.deb)\"",a); print "https://github.com/" a[1]} ' ${TMP_LATEST})
VER_LATEST=$(echo $LATEST | rev | cut -d"/" -f 2 | rev | sed 's/v//g')

VER_INST=$(dpkg -l atom | tail -n1 | tr -s ' ' | cut -d" " -f 3)

if [ "$VER_LATEST" != "$VER_INST" ]; then
  wget -q $LATEST -O $TMP_FILE
  VER_DOWN=$(dpkg-deb -f $TMP_FILE Version)
  if [ "$VER_DOWN" != "$VER_INST" ]; then
    dpkg -i $TMP_FILE
  fi
fi

rm -rf "${TMP_DIR}"

编辑:我应该澄清这将替换AB的答案中提到的/ usr / local / bin / atom-auto-update脚本的内容。答案的其他步骤是相同的​​。


3

好吧,如果脚本使用beta参数启动,则另一个更优雅的版本支持beta分支: $ update-atom beta

#!/bin/bash
DLPATH="https://atom.io/download/deb"
DLDEST="$HOME/Downloads/atom-amd64.deb"

if ! [ -z "$1" ] && [ $1=="beta" ];  then
  echo "Updating beta"
  DLPATH="$DLPATH?channel=beta"
  DLDEST="$HOME/Downloads/atom-amd64-beta.deb"
else
  echo "Updating stable"
fi

rm -f $DLDEST
wget -O $DLDEST $DLPATH 
sudo dpkg -i $DLDEST

2

通过snap安装Atom将确保您始终拥有最新版本:

sudo snap install atom --classic

通过snap或apt安装的Atom在性能或用法上有区别吗?我真的不太了解如何选择一个或另一个。谢谢。
拉蒙·苏亚雷斯

1
我已经使用了很长时间了,没有任何问题,我喜欢它而不是Deb,因为它是自动更新的,而不是一直提醒我更新。
Jorge Castro

1

我写了一个Python脚本,可用于从GitHub更新64位DEB包。您可以将以下内容另存为update-atom,例如在/etc/cron.hourly或中/etc/cron.daily

#!/usr/bin/env python

import os
import requests


def msg(text):
    """Give message to user."""
    os.system('notify-send "Atom updater" "{}"'.format(text))


def current():
    """Get current version."""
    f = os.popen("apt show atom 2>/dev/null | grep Ver")
    return f.read().split(' ')[1].strip()


def latest():
    """Get latest version."""
    upd_url = 'https://github.com/atom/atom/releases/latest'
    final = requests.get(upd_url).url
    return final.split('tag/v')[1]


def compare(cv, lv):
    """Compare versions."""
    return lv.split('.') > cv.split('.')


def upgrade(version):
    """Perform upgrade."""
    tempfile = '/tmp/atom.deb'
    url = (
        'https://github.com/atom/atom/releases/download/'
        'v{}/atom-amd64.deb'.format(version)
    )
    code = os.system(
        'rm -f {} && '
        'wget "{}" -O {} && '
        'dpkg -i {}'.format(tempfile, url, tempfile, tempfile)
    )
    return code == 0

if __name__ == '__main__':
    cv = current()
    try:
        lv = latest()
    except requests.exceptions.ConnectionError:
        print 'No network'
        exit(0)
    print 'Current version', cv
    print 'Latest version', lv
    result = compare(cv, lv)
    if result:
        print 'A new version is available!'
        msg('Updating Atom to version {}...'.format(lv))
        if upgrade(lv):
            msg('Update completed.')
        else:
            msg('Problem during update.')
    else:
        print 'Atom is updated.'

1

为了减少对Ubuntu的依赖,我编写了一个小原子包,用于在启动时检查新版本(或者您可以在Atom中使用方便的命令手动检查)。

它是独立于平台的(因此可以在任何Linux发行版,Windows等上运行)。

您可以配置一些内容,例如也仅监视稳定的频道或Beta,具有通知,什么类型以及是否应将其关闭等)。

它不会(至少到目前为止!)不会自动更新软件包。如果将来有足够的兴趣,我可能会添加该功能。

欢迎反馈,最好作为github上的票。


更改GitHub页面的建议:在“ 用法”标题下,替换The package check for new version of Atom at launchThe package checks for a new version of Atom at launch为什么在“ geiger”下?标题替换outadet Atomoutdated Atom
karel

@karel-谢谢,完成了。一些错误是由于此错误引起的。:)
mac

0

如果您是从源代码构建的,那么可以通过一个小脚本来完成此操作:

cd "/home/YOUR_USER/gitmisc/atom/"
git pull
cd script/
sudo ./build --install                   


0

Andrea Lazzarotto对python脚本进行了几个修改,以消除对notify-send的依赖(默认情况下其他Ubuntu变体没有这种依赖),并处理尚未安装atom副本的情况。另外,应该注意,您还需要其他依赖项:

须藤apt-get install python-requests git gvfs-bin

我还必须运行以下命令以获得其他一些子依赖关系...

sudo apt-get -f安装

#!/usr/bin/env python
import os
import requests

def msg(text):
  """Give message to user."""
  os.system('notify-send "Atom updater" "{}"'.format(text)
  + ' 2>/dev/null '
  +'|| echo "{}"'.format(text))

def current():
    """Get current version."""
    f = os.popen("apt show atom 2>/dev/null | grep Ver")
    result = f.read()
    if result:
      return result.split(' ')[1].strip()
    return "0.0"

def latest():
    """Get latest version."""
    upd_url = 'https://github.com/atom/atom/releases/latest'
    final = requests.get(upd_url).url
    return final.split('tag/v')[1]

def compare(cv, lv):
    """Compare versions."""
    return lv.split('.') > cv.split('.')

def upgrade(version):
    """Perform upgrade."""
    tempfile = '/tmp/atom.deb'
    url = (
        'https://github.com/atom/atom/releases/download/'
        'v{}/atom-amd64.deb'.format(version)
    )
    code = os.system(
        'rm -f {} && '
        'wget "{}" -O {} && '
        'dpkg -i {}'.format(tempfile, url, tempfile, tempfile)
    )
    return code == 0

if __name__ == '__main__':
    cv = current()
    try:
        lv = latest()
    except requests.exceptions.ConnectionError:
        print 'No network'
        exit(0)
    print 'Current version', cv
    print 'Latest version', lv
    result = compare(cv, lv)
    if result:
        print 'A new version is available!'
        msg('Updating Atom to version {}...'.format(lv))
        if upgrade(lv):
            msg('Update completed.')
        else:
            msg('Problem during update.')
    else:
        msg('Atom is updated.')

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.