Я пытаюсь Проверить последний Firefox и хотеть получить все хеши в одном файле TXT.
То, что я пытаюсь сделать:
sha1sum firefox.tar.gz > sha.txt
и я пробую также:
md5sum firefox.tar.gz > sha.txt | sha1sum firefox.tar.gz > sha.txt | sha512sum firefox.tar.gz > sha.txt
но только последнее в этом случае sha512 печатается к sha.txt.
Что я делаю неправильно? Кто-то может там помочь мне с этим?
Поскольку другие уже указали, что различие между >
(перезапись) и >>
(добавляет) операторы перенаправления, я собираюсь дать несколько решений.
можно использовать команду, группирующуюся {}
функция bash
для отправки вывода всех команд в единственном файле:
{ sha1sum foo.txt ;sha512sum foo.txt ;md5sum foo.txt ;} >checksum.txt
Поочередно можно выполнить команды в подоболочке ()
:
( sha1sum foo.txt ;sha512sum foo.txt ;md5sum foo.txt ) >checksum.txt
Необходимо использовать добавлять редиректор >>
вместо >
для последующих команд, например,
sha1sum zeromq-4.1.2.tar.gz > sha.txt
md5sum zeromq-4.1.2.tar.gz >> sha.txt
sha512sum zeromq-4.1.2.tar.gz >> sha.txt
Посмотрите Appending Redirected Output
раздел страницы руководства (man bash
).
>
редиректор пишет вывод команды (stdout
, нет stderr
- Вы используете 2>
для этого) в файл, указанный после него. Если это уже будет существовать, то файл будет перезаписан.
Это поведение полезно для первой из Ваших команд: если существует существующий файл, он должен быть удален и заменил новым.
Однако, поскольку необходимо добавить все дальнейшие выводы вместо того, чтобы заменить предыдущие, необходимо использовать добавлять-редиректор >>
. Это создаст файл, если он еще не будет существовать, но будет добавлять перенаправленный вывод в файл, если он уже существует.
И не используйте канал |
записать несколько команд в одной строке, которая перенаправила бы вывод первой команды (stdout
) к входу второй команды (stdin
).
Можно использовать точку с запятой (;
) просто сказать удару выполнять одну команду после другого, как будто это был файл сценария. Если команда перестала работать (код возврата не 0), остающиеся команды все еще выполняются.
Или Вы можете, выбрал логические операторы И (&&
) или ИЛИ (||
):
Если Вы используете &&
для соединения двух команд вторая будет только выполняться, если первый успешно выполнится (код возврата 0). Если это перестанет работать, то ни одна из следующих команд не будет работать.
||
однако только выполняет вторую команду, если первый неудавшийся (код возврата не 0)!
Таким образом в Вашем случае я рекомендовал бы Вам использовать точку с запятой:
md5sum firefox.tar.gz > sha.txt ; sha1sum firefox.tar.gz >> sha.txt ; sha512sum firefox.tar.gz >> sha.txt