Перечислите только временные псевдонимы в ударе

Или исправьте источник, чтобы иметь значение по умолчанию, или использовать здесь документ или здесь представить в виде строки для отправки входа в сценарий stdin:

./script << EOF
answer 1
answer 2
...
answer N
EOF

Определенные программы не могут принять это (обычно, обрабатывающие аутентификацию, которая может отключить это в целях безопасности). В этом случае изучите использование чего-то как expect.

4
17.04.2012, 04:35
2 ответа

Вы могли сделать это со следующим:

comm -2 -3 --nocheck-order <(alias -p) <(bash -l -c 'alias -p')

Это работает путем сравнения текущего списка псевдонимов с псевдонимами, существующими в совершенно новой оболочке.
comm утилита используется для показа только строк, которые присутствуют в первой команде <(alias -p). --nocheck-order необходимо, чтобы помешать ему жаловаться, что список псевдонима не в порядке, даже при том, что это действительно...

2
27.01.2020, 20:50
  • 1
    Псевдонимы, определенные файлами профиля удара для совершенно новой оболочки, могли отличаться от тех определенных теми теми же файлами для текущей оболочки (т.е. [[ $(( $RANDOM % 2 )) == 0 ]] && alias ...). Хорошая подсказка об использовании comm хотя! –  peoro 18.04.2012, 04:27
  • 2
    @peoro никто не собирается сделать это все же. Серьезно, Вы запускаете оболочку с того же самого TTY как исходная оболочка, среда является тем же, нет никакой причины, почему псевдонимы отличались бы. –  Patrick 18.04.2012, 16:19

Дело не в этом простой. Нет никакого понятия "временных" псевдонимов в ударе, и для удара любая команда, выполняемая путем определения источника .bashrc, совпадает с любым, что Вы вводите в командную строку. Кроме того, файлы профиля удара могли определить некоторые псевдонимы только при некоторых обстоятельствах.

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

$ BASE_ALIAS="$(alias | sort)"
$ alias tmp_alias=""
$ unalias ls
$ diff <( echo "$BASE_ALIAS" ) <( alias | sort )
3d2
< alias ls='ls --color=auto'
5a5
> alias tmp_alias=''

diff шоу, что псевдоним ls был удален и псевдоним tmp_alias был добавлен начиная с объявления BASE_ALIAS.

6
27.01.2020, 20:50

Теги

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