Я предполагаю, что Вы говорите об одновременных сессиях; разделение сессий, которые являются друг после друга, не очень полезно: Вы никогда не могли бы использовать, это больше - история, потому что все сессии были бы уникальны. Если бы это имело место, то Вы, вероятно, были бы более обеспечены просто отключающая история команд.
Если бы мы говорим о разделении одновременной сессии, я рекомендовал бы использовать Bash. Я вполне уверен, я не получаю историю команд от двух одновременных сессий, смешанных с ним. Bash только пишет историю в .bash_history
при выходе из системы, таким образом, история команд не будет смешана до окончания выхода из системы. При условии, что использование Bash приемлемо, который решил бы Вашу проблему?
exec
для дескрипторов файлов и set -x
являются портативными; xtrace
не, но должно на самом деле быть то же самое как -x
.
Чтобы сохранить и восстановить дескрипторы файлов, Вы действительно используете exec
снова. Необходимо выбрать некоторые неиспользованные дескрипторы, который обычно означает что-либо более чем 2, и перенаправьте оригиналы тем, затем перенаправьте назад в конце.
exec 20<&0 21>&1 22>&2
# do your redirections
# do whatever you wanted to have redirected
exec <&20 >&21 2>&22 20<&- 21>&- 22>&-
Последняя строка сначала dup()
s сохраненные дескрипторы файлов назад то, куда они произошли из, затем закрывается (&-
) копии. Завершения являются, вероятно, ненужными, но хорошая идея.
Также обратите внимание, что, если это выполняется в его собственной оболочке, перенаправления уходят, когда оболочка делает. Необходимо было бы только отменить перенаправление, если бы Вы использовали .
(портативный) или source
(bash
).
Для рабочего каталога попробовать PS4='+$PWD '
. Одинарные кавычки означают, что это только расширено, когда это собирается быть распечатанным. Первый символ PS4
может быть распечатан многократно, таким образом, Вы, вероятно, все еще хотите +
или по крайней мере пространство в запуске.
Согласно определению POSIX набора, set -x
и set -o xtrace
оба поддерживаются. В странице справочника тире говорится, что она в порядке также.
'$PWD$ '
заменен, как то, везде, где set -x
использование это, и затем расширено там.Правильно? Я не, однако, ясен на том, под чем Вы подразумеваете The first character of PS4 can be printed multiple times...
. Можно ли уточнить?
– Faheem Mitha
07.05.2011, 22:31
set -o xtrace
портативный или нет? Я попытаюсь понять то, о чем исполнительные перенаправления. У Вас есть хорошая ссылка для этого? А-ч – Faheem Mitha 07.05.2011, 01:32set -o xtrace
не является портативным, но его значение вbash
совпадает с портативной версией,set -x
. Перенаправления, которые можно найти зарегистрированным в gnu.org/software/bash/manual/bashref.html#Redirections — примечание, разделяют 3.6.8 в частности. (3.6.9, однако,bash
- конкретный.) – geekosaur 07.05.2011, 01:58set -o xtrace
было стандартным некоторое время. Граница только имелаset -x
IIRC.exec
перенаправления уже были в Bourne также, но только с одноразрядными дескрипторами файлов в некоторых системах. – Gilles 'SO- stop being evil' 07.05.2011, 02:09set -o xtrace
иset -x
эквивалентны и оба портативных, затем который должен быть предпочтен? Вы ссылаетесь на Bourne как на предшественника стандарта POSIX? – Faheem Mitha 07.05.2011, 03:31/bin/sh
в течение формирующих лет Unix. Стандарт POSIX был главным образом компромиссом между then-already-elderly Оболочкой Bourne и большим количеством featureful, но не универсально доступной оболочкой Korn. Almquist (замена BSD для несвободной Оболочки Bourne) имелset -x
со дня один, но не получалset -o
до позже. Такset -x
получит Вас мобильность к больше более старому (предPOSIX) платформы. – Gilles 'SO- stop being evil' 07.05.2011, 13:49