Как насчет использования xargs
так как это знает о пределах размера аргумента:
cp "$template_file" "$output_file" || exit 1
echo "$listing" \
| xargs -I arg sed -i 's/{{LISTING}}/arg {{LISTING}}/' "$output_file" \
| sed -i 's/ {{LISTING}}//' "$output_file"
Протест здесь - это xargs
полосы, запаздывающие новые строки в именах файлов.
Один из способов сделать это, чтобы начать с текущего Bash PID (вы получите его с $$), а затем получите PPID, и так далее, пока не найдете, что терминал является предком Bash Shell. На основании этой информации вы устанавливаете PS.
Обычно родитель оболочки будет терминалом
доказательство концепции в моей системе (Debian 7).
$ PARENT_PID=$(ps --pid=$$ -o ppid --no-headers)
$ ps --pid $PARENT_PID -o command --no-headers
gnome-terminal -x /bin/sh -c cd '/home/XXXX/Desktop' && exec $SHELL
Итак, в моей системе достаточно, чтобы посмотреть на родитель оболочки, чтобы найти, что он работает с терминала GNOME.
Конденсировано в одной строке:
$ ps --pid $(ps --pid=$$ -o ppid --no-headers) -o command --no-headers
gnome-terminal -x /bin/sh -c cd '/home/XXXX/Desktop' && exec $SHELL
Я попробовал и добавил эту строку в мою .bashrc
MY_TERMINAL=$(ps --pid $(ps --pid=$$ -o ppid --no-headers) -o command --no-headers | cut -f 1 -d " ")
, и я проверил, что My_terminal
содержит гноме-терминал
.
Так что это должно сделать это.
Проверка, какая терминал открывается:
case "$TERM" in
gnome-terminal ) PS1="[\h] \W > \[\033]0;[\u@\h] \w\007\]"
;;
xfce4-terminal ) PS1="> "
;;
esac
Измените свой .bashrc
и проверьте имя родительского процесса.
parent_process=$(ps -o comm= -p $PPID)
parent_process=${parent_process##*/}
case "$parent_process" in
xfce4-terminal) PS1='> ';;
esac
Другой метод - установка переменной окружения: запустите PROMPT_THEME=plain xfce4-terminal
и протестируйте значение PROMPT_THEME
в вашем .bashrc
. Вы можете захотеть отменить или, по крайней мере, неиспортить переменную там, так как иначе она также будет установлена в терминалах, запущенных изнутри этого первого.
case $PROMPT_THEME in
plain) PS1='> ';;
esac
export -n PROMPT_THEME
С помощью xfce4-терминала
, это не сработает, за исключением первого экземпляра, так как последующие экземпляры просто уведомляют запущенный экземпляр об открытии нового окна, таким образом, новые экземпляры наследуют окружение от запущенного. (Yeech!) Вместо этого вы можете установить переменную окружения через команду, которую запускаете в терминале, с помощью утилиты env
.
xfce4-terminal -x env PROMPT_THEME=plain bash
Если ваш ~ / .Bashrc
~ / .bashrc ~ / .bashrc
~ / .bashrc
Prompt_command
, вы можете запустить XFCE4-терминал
:
PROMPT_COMMAND='PS1="> "; unset PROMPT_COMMAND' xfce4-terminal