Вы не можете сделать это в bash с перенаправлениями, но вы можете сделать что-то вроде это:
$ cat file1
europe|EU
australia|AU
china|CN
$ cat file1 | { IFS=$'\n' read -r -d '' -a a; printf '%s\n' "${a[@]}"; printf '%s\n' "${a[@]}" >teetest; }
europe|EU
australia|AU
china|CN
$ cat teetest
europe|EU
australia|AU
china|CN
Альтернатива:
$ { IFS=$'\n' read -r -d '' -a a; printf '%s\n' "${a[@]}"; printf '%s\n' "${a[@]}" >teetest; } <file1
Или вы можете построить функцию:
$ function teetest { v="$(</dev/stdin)";printf '%s\n' "$v";printf '%s\n' "$v">teetest; }
$ cat file1 |teetest
europe|EU
australia|AU
china|CN
$ cat teetest
europe|EU
australia|AU
china|CN
В качестве продолжения John's answerвы можете изменить строку sudo
на следующую:
if [ "$(id -un)" != "test" ]; then
exec sudo -u test "$0" "$@"
exit
fi
Это повторит выполнение сценария с пользователем . ] test
, если это не тест, который уже выполняет его.
Первая строка в этом скрипте запускает новую оболочку под идентификатором пользователя test
и ожидает выхода из этой оболочки перед выполнением первой команды export
для изменения пути. Скрипт делает именно то, что вы ему сказали.