Есть ли способ при выполнении команды для файла ссылаться на файл, не вводя полное имя? [дубликат]

El culpable es este:

# cat /etc/apt/sources.list.d/*
deb http://download.owncloud.org/download/repositories/stable/Debian_8.0/ /

El servidor de descarga ownCloud ahora redirige a la URL de TLS en todos los casos, rompiendo aptcomo ha descubierto.

Para poder actualizar e instalar apt-transport-https, debe deshabilitar temporalmente el repositorio ownCloud. Puede hacer esto cambiando el nombre del archivo apropiado para que tenga una extensión diferente a .listo .sources.

9
16.12.2018, 02:00
4 ответа

Вы можете сначала присвоить имя файла переменной:

f=test.tar.gz; tar xvf "$f"; rm "$f"

Или используйте специальный параметр$_, он содержит последнее слово предыдущей команды, которое часто (, но, конечно, не всегда )имя файла, с которым вы работали:

tar xvf test.tar.gz; rm "$_"

Это также работает с несколькими командами, если имя файла всегда является последним аргументом для команд (, например. echo foo; echo $_; echo $_печатает три раза foo.)

Кроме того, вы можете рассмотреть возможность использования tar... && rm..., то есть с оператором &&вместо точки с запятой. Таким образом, rmне запустится, если первая команда завершится ошибкой.

19
27.01.2020, 20:04

Вы можете использовать !$, если переместите вторую команду на новую строку.

tar xvf test.tar.gz
rm !$
4
27.01.2020, 20:04

если вы когда-либо использовали цикл для обработки нескольких файлов, то вы уже использовали способ, который вы также можете использовать только для одного файла:

for i in a.tgz b.tgz c.tgz; do tar xvf $i; rm $i; done

для одного файла:

for i in a.tgz; do tar xvf $i; rm $i; done

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

0
27.01.2020, 20:04

В версии bashвыше 4 можно использовать расширение истории для ссылки на n-й позиционный параметр текущей команды. Например, в tar xvf test.tar.gzэто второй позиционный параметр команды, поэтому команда может быть сокращена до

tar xvf test.tar.gz && rm !#:2

Другой, более портативный способ (, протестированный с /bin/dash), заключается в использовании переменной $_для ссылки на последний позиционный параметр:

tar xvf test.tar.gz && rm "$_"

См. также Как выполнить несколько команд, используя один и тот же аргумент?

3
27.01.2020, 20:04

Теги

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