Shell: Это - возможная ссылка предыдущий параметр?

Действительно ли возможно выполнить последовательные команды с теми, которые следуют, ссылка на параметр (параметры) передала самому первому?

Например, загрузите, untar, и CD:

wget superuser.tar.gz
tar -xzf superuser.tar.gz
cd ./superuser

Вместо этого сделайте:

wget superuser.tar.gz && tar -xzf $1 && cd $1
// with $1 being superuser.tar.gz

Единственным путем я могу думать о выполнении, это должно сослаться на него как на переменную. Есть ли другое решение?

3
задан 08.01.2010, 11:10

5 ответов

$_ мог бы добиться цели:

koke@escher:~$ mkdir test && cd $_ && echo $_
test
koke@escher:~/test$
4
ответ дан 07.12.2019, 23:18

Таким образом, чтобы подробно остановиться на ответе Jorge Bernal, можно использовать расширение параметра, также:

wget superuser.tar.gz && tar -xzf $_ && cd ${_%.tar.gz}

который снимет изоляцию с ".tar.gz"

2
ответ дан 07.12.2019, 23:18

Не, что Вы попросили, но возможно это достаточно близко для Вас. В ударе Meta +_ (Meta + подчеркивание) даст Вам последний параметр предыдущей команды. Так, можно сделать:

$ wget superuser.tar.gz
$ tar -xzf <Meta>-_
# In the above, I typed Meta-_, got superuser.tar.gz
$ cd ./ <Meta>-_<Meta>-2<Meta>-<backspace><backspace>
# In the above, I type Meta-_ to get superuser.tar.gz, then
# Meta-2 followed by Meta-backspace to delete
# two words, then backspace to delete the period.

Это легче сделанный, чем объясненный, к сожалению.

Мне отобразили мою клавишу Alt на Meta (значение по умолчанию на большинстве терминалов в Linux), таким образом, очень легко ввести.

Наконец, Meta +_ берет числовой аргумент, таким образом, можно ввести Meta+2Meta +_ для получения второго параметра предыдущей команды в текущей позиции курсора.

1
ответ дан 07.12.2019, 23:18

Кстати, Вы - более обеспеченное использование dtrx для извлечения архивов сразу. Тем путем грязные архивы не создадут помехи Вашим каталогам. Другие альтернативы: atool, 7z, unp, и e. Большинство из них через reddit.

1
ответ дан 07.12.2019, 23:18

Последняя часть хитра, потому что папку в архиве, вероятно, не называют тем же как архив (superuser.tar.gz), поэтому если папку внутри также не назовут superuser.tar.gz, необходимо будет использовать базовое имя или подобный для удаления .tar.gz расширения. Если Вы знаете имя каталога однако, Вы могли бы просто предоставить его на командной строке.

Остальное легко. Отправьте вывод Wget в stdout, затем передайте его по каналу к tar:

wget -O - superuser.tar.gz 2> /dev/null | tar xzvf -

Если Вы знаете название каталога в архиве:

wget -O - superuser.tar.gz 2> /dev/null | tar xzvf - && cd superuser

Это не универсально через команды, очевидно, но большую часть того, чего Вы хотите достигнуть посредством "ссылки", может быть сделан посредством передачи по каналу вместо этого.

0
ответ дан 07.12.2019, 23:18

Теги

Похожие вопросы