Как перенаправить весь stderr в ударе?

Для десериализации JSON с помощью Swift 2.0

есть отличный пример . Трюк состоит в том, чтобы использовать ключевое слово guard и цепочки присвоений следующим образом:

init?(attributes: [String : AnyObject]) {
    guard let name = attributes["name"] as? String,
        let coordinates = attributes["coordinates"] as? [String: Double],
        let latitude = coordinates["lat"],
        let longitude = coordinates["lng"],
        else {
            return nil
    }
    self.name = name
    self.coordinates = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
}

Я лично предпочитаю собственный парсинг против какой-либо третьей стороны, так как он прозрачен и без магии. (и ошибка меньше?)

10
задан 17 of 26 8 April 2009 в 19:35
поделиться

5 ответов

Вы могли запустить новый процесс удара, перенаправляющий stderr того процесса:

  $ bash -i 2> stderr.log
  $ 
4
ответ дан 3 December 2019 в 18:37
поделиться

Попробуйте свои команды в doublequotes, как так:

ssh remotehost "command" 2>~/stderr

Протестированный в моей локальной системе с помощью несуществующего файла на удаленном хосте.

$ ssh remotehost "tail x;head x" 2>~/stderr
$ cat stderr 
tail: cannot open `x' for reading: No such file or directory
head: cannot open `x' for reading: No such file or directory
2
ответ дан 3 December 2019 в 18:37
поделиться

Я не вижу Вашей проблемы, она работает, как разработано:

$ ssh remotehost 'ls nosuchfile; ls /etc/passwd' >/tmp/stdout 2>/tmp/stderr 
$ cat /tmp/stdout  
/etc/passwd 
$ cat /tmp/stderr 
nosuchfile not found
2
ответ дан 3 December 2019 в 18:37
поделиться

Используйте exec встроенный в ударе:

exec 2> /tmp/myfile

9
ответ дан 3 December 2019 в 18:37
поделиться

Tried ssh -t для создания псевдо-TTY на удаленном конце?

0
ответ дан 3 December 2019 в 18:37
поделиться