Как найти возвращаемое значение последней выполняемой команды в UNIX?

Попробуйте хвост :

tail -n +2 "$FILE"

-n x: Просто распечатайте последнее x строки. tail -n 5 дал бы Вам последние 5 строк входа. + вид знака инвертирования аргумент и делают tail печать что-либо кроме первого x-1 строки. tail -n +1 распечатал бы целый файл, tail -n +2 все кроме первой строки, и т.д.

, GNU tail намного быстрее, чем [1 112]. tail также доступно на BSD и эти -n +2, флаг последователен через оба инструмента. Проверьте FreeBSD или OS X страницы справочника для больше.

версия BSD может быть намного медленнее, чем [1 115], все же. Интересно, как они управляли этим; tail должен просто считать файл линию за линией, в то время как sed делает довольно сложное операционное вовлечение, интерпретирующее сценарий, применяя регулярные выражения и т.п..

Примечание: можно испытать желание использовать

# THIS WILL GIVE YOU AN EMPTY FILE!
tail -n +2 "$FILE" > "$FILE"

, но это даст Вам пустой файл . Причина состоит в том, что перенаправление (>) происходит, прежде tail вызывается оболочкой:

  1. Shell усекает файл $FILE
  2. , Shell создает новый процесс для [1 121]
  3. , Shell перенаправляет stdout эти tail процесс к [1 123]
  4. tail чтения от теперь пустой $FILE

, Если Вы хотите удалить первую строку в файле, необходимо использовать:

tail -n +2 "$FILE" > "$FILE.tmp" && mv "$FILE.tmp" "$FILE"

Эти && удостоверится, что файл не становится перезаписанным, когда существует проблема.

28
задан 14 July 2009 в 05:50
поделиться