Подсказка изменения при запуске терминала со сценария удара (но не влияют на все терминалы),

Как насчет использования 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 полосы, запаздывающие новые строки в именах файлов.

3
02.11.2014, 01:36
4 ответа

Один из способов сделать это, чтобы начать с текущего 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 содержит гноме-терминал .

Так что это должно сделать это.

0
27.01.2020, 21:31

Проверка, какая терминал открывается:

 case "$TERM" in
    gnome-terminal ) PS1="[\h] \W > \[\033]0;[\u@\h] \w\007\]"
        ;;
    xfce4-terminal ) PS1="> "
        ;;
    esac
0
27.01.2020, 21:31

Измените свой .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
1
27.01.2020, 21:31

Если ваш ~ / .Bashrc ~ / .bashrc ~ / .bashrc ~ / .bashrc Prompt_command , вы можете запустить XFCE4-терминал :

PROMPT_COMMAND='PS1="> "; unset PROMPT_COMMAND' xfce4-terminal
0
27.01.2020, 21:31

Теги

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