Комбинация смолы и головы -1 не работает, как ожидалось - PullRequest
0 голосов
/ 07 декабря 2018

Я работаю над сценарием, который должен распаковать файл и затем переключиться на первую папку, распакованную с помощью комментария cd.

Что я делаю, это следующее:

    filename_2=$(tar zxvf ${filename} | head -1) 
    cd $filename_2

И работает как ожидалось, но не распаковывает все файлы из файла tar.gz, не знаю почему, потому что если яdo:

    filename_2=$(tar zxvf ${filename}) 

Все будет распаковано нормально, но тогда я не уверен, как получить доступ к первой папке, полученной в результате распаковки.

Я не понимаю, как | pipe действует на предыдущую команду.

Что я делаю не так?

Спасибо.

1 Ответ

0 голосов
/ 07 декабря 2018

Поскольку head завершено, он посылает сигнал SIGPIPE на tar, вызывая его остановку.Вам нужно буферизовать стандартный вывод до завершения работы tar, например, используя sponge из moreutils:

filename_2=$(tar zxvf ${filename} | sponge | head -1)

Если у вас нет губки, tail с высоким значением также обычно работает:

filename_2=$(tar zxvf ${filename} | tail -n 10000000000 | head -1)
...