Это кажется, что Вы проходите проверку подлинности с Active Directory. Когда Вы перемещаетесь в свою домашнюю сеть, Ваш AD контроллер не присутствует так, Samba не знает, что сделать.
Почему делает это, все еще дает то сообщение, когда Вы возвращаетесь к работе? Никакая идея, но мое предположение не существует кэш где-нибудь, который должен быть сброшен.
Быстрый поиск DuckDuckGo сбрасывания winbind кэша самбы здесь.
Я удостоверился бы, что сделал резервное копирование перед рукой.
Примечание: Я только предполагаю, что это использует Active Directory, потому что я видел подобную ошибку на машинах Windows, и обычный ответ должен был удалить их из домена и воссоединиться с ними.
( exec sh -i 3<<SCRIPT 4<&0 <&3 ⏎
echo "do this thing"
echo "do that thing"
exec 3>&- <&4
SCRIPT
)
Это лучше сделать из сценария, но с помощью exec $ 0.
Или, если один из этих файловых дескрипторов направляет на терминальное устройство, которое в настоящее время не используется, это поможет - вы должны помнить, что другие процессы тоже хотят проверить этот терминал.
И, кстати, если ваша цель, как я предполагаю, состоит в том, чтобы сохранить среду сценария после его выполнения, вам, вероятно, будет намного лучше работать с:
. ./script
.dot [оболочки] оболочки
и исходный код bash
не одно и то же - .dot
оболочки - это POSIX, указанный как специальная встроенная оболочка, и поэтому он настолько близок к гарантированному, насколько это возможно, хотя это ни в коем случае не гарантия, что он будет там ...
Хотя вышеперечисленное должно работать так, как вы ожидаете, без особых проблем. Например, вы можете:
( exec sh -i 3<<SCRIPT 4<&0 <&3 ⏎
echo "do this thing"
echo "do that thing"
$(cat /path/to/script)
exec 3>&- <&4
SCRIPT
)
Оболочка запустит ваш скрипт и вернет вас к интерактивной подсказке - пока вы избегаете exit
в оболочке из вашего скрипта, т.е. который свяжет ваш ввод-вывод с / dev / null.
% printf 'echo "%s"\n' "These lines will print out as echo" \
"statements run from my interactive shell." \
"This will occur before I'm given the prompt." >|/tmp/script
% ( exec sh -i 3<<SCRIPT 4<&0 <&3
echo "do this thing"
echo "do that thing"
$(cat /tmp/script)
exec 3>&- <&4
SCRIPT
)
sh-4.3$ echo "do this thing"
do this thing
sh-4.3$ echo "do that thing"
do that thing
sh-4.3$ echo "These lines will print out as echo"
These lines will print out as echo
sh-4.3$ echo "statements run from my interactive shell."
statements run from my interactive shell.
sh-4.3$ echo "This will occur before I'm given the prompt."
This will occur before I'm given the prompt.
sh-4.3$ exec 3>&- <&4
sh-4.3$
ЗАДАНИЙ
Я считаю, что вам следует поближе познакомиться со встроенными в оболочку параметрами управления задачами.@Kiwy и @jillagre уже затронули этот вопрос в своих ответах, но это может потребовать дополнительных подробностей. И я уже упоминал одну встроенную специальную оболочку, указанную в POSIX, но set, jobs, fg,
и bg
- это еще несколько, и, как показывает другой ответ, ] trap
и kill
- еще два.
Если вы еще не получаете мгновенных уведомлений о состоянии одновременно запущенных фоновых процессов, это связано с тем, что для ваших текущих параметров оболочки установлено значение по умолчанию, указанное в POSIX -m
, но вы можете получить их асинхронно с вместо этого установите -b
:
% man set
-b Эта опция должна поддерживаться, если реализация поддерживает опцию User Portability Utilities . Это должно заставить оболочку асинхронно уведомлять пользователя о завершении фоновых заданий. Следующее сообщение записывается в стандартную ошибку:
"[%d]%c %s%s\n", <job-number>, <current>, <status>, <job-name>
where the fields shall be as follows:
<current> The character '+' identifies the job that would be
used as a default for the fg or bg utilities; this
job can also be specified using the job_id "%+" or
"%%". The character '−' identifies the job that
would become the default if the current default job
were to exit; this job can also be specified using
the job_id "%−". For other jobs, this field is a
<space>. At most one job can be identified with '+'
and at most one job can be identified with '−'. If
there is any suspended job, then the current job
shall be a suspended job. If there are at least two
suspended jobs, then the previous job also shall be a
-m Эта опция должна поддерживаться, если реализация поддерживает параметр User Portability Utilities. Все задания должны выполняться в своих группах процессов. Непосредственно перед тем, как оболочка выдаст приглашение после завершения фонового задания, сообщение о статусе выхода фонового задания должно быть записано в стандартную ошибку . Если задание переднего плана останавливается, оболочка должна написать для этого сообщение в стандартную ошибку, отформатированную, как описано утилитой заданий .Кроме того, если задание меняет статус, отличный от выхода (например, если оно останавливается для ввода или вывода или остановлено сигналом SIGSTOP), оболочка должна написать аналогичное {{1} }} сообщение непосредственно перед написанием следующего приглашения. Эта опция включена по умолчанию для интерактивных оболочек.
Очень фундаментальной особенностью систем на основе Unix является их метод обработки сигналов процесса
. Однажды я прочитал поучительную статью на эту тему, в которой этот процесс сравнивается с описанием планеты Дугласом Адамсом NowWhat:
"В" Автостопом по галактике "Дуглас Адамс упоминает {{ 1}} чрезвычайно унылая планета, населенная кучкой депрессивных людей и определенной породы животных с острыми зубами, которые общаются с людьми, очень сильно кусая их за бедра. Это поразительно аналогично UNIX, в котором ядро взаимодействует с процессами, посылая им парализующие или смертельные сигналы. Процессы могут перехватывать некоторые из сигналов и пытаться адаптироваться к ситуации , но большинство из них этого не делают ".
Это относится к сигналам уничтожения
.
% kill -l
> HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS
По крайней мере, для меня приведенная цитата ответила на множество вопросов. Например, я всегда считал очень странным и отнюдь не интуитивным, что если я хотел отслеживать процесс dd
, мне приходилось убить
его. После прочтения это имело смысл.
Я бы сказал, что большинство из них не пытаются адаптировать по уважительной причине - это может быть гораздо больше неприятностей, чем благо, если куча процессов рассылает ваш терминал какой-либо информацией их разработчики думали, что это может быть важно для вас.
В зависимости от конфигурации вашего терминала (которую можно проверить с помощью stty -a
) , CTRL + Z
, скорее всего, будет пересылать SIGTSTP
текущему лидеру группы процессов переднего плана, который, вероятно, является вашей оболочкой,и который также должен быть настроен по умолчанию на перехват
этого сигнала и приостановку вашей последней команды. Опять же, как показывают совместные ответы @jillagre и @Kiwy, вам ничто не мешает адаптировать эту функциональность к вашим целям по своему усмотрению.
ЭКРАННЫЕ ЗАДАНИЯ
Итак, чтобы воспользоваться этими функциями, ожидается, что вы сначала поймете их и настроите их обработку в соответствии со своими потребностями. Например, я только что нашел этот screenrc на Github , который включает screen
привязки клавиш для SIGTSTP
:
# hitting 'C-z C-z' will run Ctrl+Z (SIGTSTP, suspend as usual)
bind ^Z stuff ^Z
# hitting 'C-z z' will suspend the screen client
bind z suspend
Это упростило бы задачу приостановить процесс, выполняющийся как дочерний процесс screen
или сам дочерний процесс screen
, по вашему желанию.
И сразу после этого:
% fg
ИЛИ:
% bg
Будет ли процесс на переднем плане или в фоновом режиме по вашему усмотрению. Встроенные задания
могут предоставить вам их список в любое время. Добавление операнда -l
будет включать сведения о pid.
Я действительно не вижу смысла делать это, поскольку вы уже возвращаетесь в оболочку после запуска этой программы. Однако вы можете сделать это:
bash -c "some_program with its arguments; bash"
Это запустит интерактивный bash после запуска программы.
Вы можете использовать screen для выполнения команды. Затем вы можете повторно подключиться к сеансу после завершения команды.
Или просто запустите команду в фоновом режиме some_program с ее аргументами &
. Это даст вам возможность повторно запустить команду и получить статус команды, как только она будет выполнена.
Это должно помочь:
bash -c "some_program with its arguments;bash"
Изменить:
Вот новая попытка после вашего обновления:
bash -c "
trap 'select wtd in bash restart exit; do [ \$wtd = restart ] && break || \$wtd ; done' 2
while true; do
some_program with its arguments
done
"
- Мне нужно завершить some_program из время от времени
Используйте Control C , вам будет представлено это небольшое меню:
1) bash
2) restart
3) exit
- Я не хочу помещать его на задний план
Это так.
- Я хочу остаться на bash, а затем заняться чем-нибудь еще
Выберите вариант «bash»
- Я хочу снова запустить программу
Выберите вариант «перезапустить»
{ {1}}Вы можете поместить команду в фон, чтобы сохранить текущий bash открытым:
some_program with its arguments &
Чтобы вернуться к запуску, вы можете использовать команду fg
и ^+z
, чтобы снова поместить ее в фон
Вы можете сделать это, передав свой скрипт в качестве файла инициализации:
bash --init-file foo.script
Или вы можете передать его в командной строке:
bash --init-file <(echo "ls -al")
Обратите внимание, что --init-file
предназначен для чтения общесистемных файлов инициализации, таких как /etc/bash.bashrc
, так что вы можете захотеть ' source
' их в своем скрипте.