Или исправьте источник, чтобы иметь значение по умолчанию, или использовать здесь документ или здесь представить в виде строки для отправки входа в сценарий stdin
:
./script << EOF
answer 1
answer 2
...
answer N
EOF
Определенные программы не могут принять это (обычно, обрабатывающие аутентификацию, которая может отключить это в целях безопасности). В этом случае изучите использование чего-то как expect
.
Вы могли сделать это со следующим:
comm -2 -3 --nocheck-order <(alias -p) <(bash -l -c 'alias -p')
Это работает путем сравнения текущего списка псевдонимов с псевдонимами, существующими в совершенно новой оболочке.
comm
утилита используется для показа только строк, которые присутствуют в первой команде <(alias -p)
. --nocheck-order
необходимо, чтобы помешать ему жаловаться, что список псевдонима не в порядке, даже при том, что это действительно...
Дело не в этом простой. Нет никакого понятия "временных" псевдонимов в ударе, и для удара любая команда, выполняемая путем определения источника .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
.
[[ $(( $RANDOM % 2 )) == 0 ]] && alias ...
). Хорошая подсказка об использованииcomm
хотя! – peoro 18.04.2012, 04:27