Как получить последние места в терминале/оболочке?

Проверьте, достаточно ли строк fileс помощьюwc -l(подсчета строк ).

Отображать предупреждение, если в файле недостаточно строк.

[ $(cat file | wc -l) -ge 4 ] && sed -i '4s pattern' file || echo "not enough lines"
2
09.01.2021, 15:48
1 ответ

Если ваша оболочка zsh(, которая, насколько мне известно, используется по умолчанию в более новых версиях macos ), вы можете установить параметр autopushd(set -o autopushdв своем ~/.zshrc), что заставит zshзапоминать все мест (текущие рабочие каталоги, измененные с помощью cd/ pushd/popd)вы были.

Затем вы можете увидеть этот стек с:

dirs

Или dirs -v, чтобы увидеть индекс каждого каталога в стеке, который вы можете использовать, например, в cd +5или ls -ld ~+5для 5-й записи (, переданной верхней строкой, которая является текущим каталогом в выводе dirs).

или:

print -rC1 $dirstack

($dirstackпредоставление этого стека в виде массива без текущего рабочего каталога ).

Или,если у вас включено расширенное завершение с описаниями (, см.compinstall)со списком завершения на:

cd +<Tab>

или

cd -<Tab>

Или для любой команды после ~-или~+:

any cmd ~+<Tab>

Например, с

set -o autopushd
zstyle ':completion:*' format 'Completing %d'
zstyle ':completion:*' menu select=2
autoload -Uz compinit
compinit -i

в ~/.zshrc, после того, как я посетил несколько каталогов, при двойном нажатии вкладки я получаю меню, такое как:

% cd +1
Completing directory stack
[1 -- ~/Videos]
 2 -- ~/Downloads
 3 -- ~/
 4 -- /usr
 5 -- /tmp

По которому я могу перемещаться с помощью клавиш со стрелками.

Функция стека каталогов сама по себе не зависит -от zsh. Он и команды pushd/ popd/ dirsдля управления им были введены cshв 1980 году, скопированыbash(1.02 в 1989 году )иzsh(1.0 в 1990 году )позже. cd +5, cd -5также взяты из csh(, добавленного в zsh в версии 2.0 в 1991 году ). ~+/ ~-взяты изbash(1989 )скопированы позжеzsh(1991 ), а ~+5взяты изzsh(1996 ), скопированы позжеbash(1997 ). Толькоautopushd(для cd, чтобы также использовать этот стек, например молчание pushd), являетсяzsh-специфическим, и его структура завершения намного опережает bash, а теперь также tcsh(, но догоняетfish).

4
18.03.2021, 22:37

Теги

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