Вы можете найти хорошее руководство здесь: Keep Your SSH Session Running when You Disconnect
sudo apt-get install screen
Теперь вы можете начать новый сеанс экрана, просто набрав screen в командной строке. Вам будет показана некоторая информация об screen. Нажмите Enter, и вы окажетесь в обычном приглашении.
Чтобы отключиться (но оставить сеанс запущенным) Нажмите Ctrl + A, а затем Ctrl + D в мгновенной последовательности. Вы увидите сообщение [detached]
To reconnect to an already running session
screen -r
To reconnect to an existing session, or create a new one if none exists
screen -D -r
To create a new window within a running screen session. Нажмите Ctrl + A и затем C в мгновенной последовательности. Появится новое приглашение.
Для перехода от одного окна экрана к другому Нажмите Ctrl + A, а затем Ctrl + A последовательно.
Чтобы составить список открытых окон экрана Ctrl + A и затем W последовательно
Согласен, не очень понятно.
, если переменная _
находилась в среде, которую bash
получил , то bash
не затрагивает ее.
В частности, если оболочка bash
была вызвана другой оболочкой bash
(хотя zsh
, yash
и некоторые реализации ksh
также делают
это), тогда оболочка bash
установит для переменной среды _
значение путь выполняемой команды (это третья
точка в вашем вопросе). Например, если bash
вызывается для
интерпретации сценария в результате интерпретации другой bash
оболочки:
bash-script некоторые аргументы
Этот bash
будет передавать _ = / path / to / bash-scrip
в среде
, заданной для bash-script
, и таким будет начальное значение
переменной $ _
bash
в оболочке bash
, которая
интерпретирует этот сценарий.
$ env -i _ = something bash -c 'echo "$ _"'
что угодно
Итак, , если вызывающее приложение не передает _
окружения
переменная , вызываемая оболочка bash
инициализирует $ _
в argv [0]
, который он получает
, который может быть bash
, или / path / to / bash
или
/ path / to / some-script
или что-нибудь еще (в приведенном выше примере это
было бы / bin / bash
, если бы она была #! / bin / bash
{{ 1}} или / путь / к / bash-скрипту
в зависимости от системы
).
Таким образом, этот текст вводит в заблуждение, поскольку он описывает поведение вызывающей стороны
, которую bash
не может контролировать. Приложение, вызвавшее
bash
, вполне может вообще не устанавливать $ _
(на практике это делают только некоторые
оболочки и несколько редких интерактивных приложений. , execlp ()
, например, не
), или он может использовать его для чего-то совершенно другого
(например, ksh93
устанавливает его в * pid * / путь / к / команде
).
$ env bash -c 'echo "$ _"'
/ usr / bin / env (env не установил его как / bin / bash, поэтому мы
получаем один передан в env моей интерактивной оболочкой)
$ ksh93 -c 'bash -c "echo \ $ _"'
* 20042 * / bin / bash
Впоследствии тоже не очень ясен. На практике это как только bash
интерпретирует простую команду в текущей среде оболочки.
В случае интерактивной оболочки это будет первая простая команда, интерпретируемая, например, из /etc/bash.bashrc
.
Например, в приглашении интерактивной оболочки:
$ echo "$ _"
] (последний аргумент последней команды из моего ~ / .bashrc)
$ f () {эхо-тест; }
$ echo "$ _"
] (в предыдущей командной строке не было простой команды, поэтому мы получаем
последний аргумент предыдущей командной строки echo) {{1} } $ (: test)
$ echo "$ _"
] (простая команда, но в среде суб-оболочки)
$: test
$ echo "$ _"
test
Для неинтерактивной оболочки это будет первая команда в $ BASH_ENV
или код, введенный в эту shell, если $ BASH_ENV
не установлен
.
Третий момент отличается от предыдущего и упоминается в обсуждении выше.
bash
, как и некоторые другие оболочки, будет передавать переменную среды _
командам, которые он выполняет, которая содержит путь, который bash
использовал в качестве первого аргумента для ] execve ()
системные вызовы.
$ env | grep '^_'
_=/usr/bin/env
Четвертый пункт более подробно описан в описании переменной MAILPATH
:
'MAILPATH'
Список разделенных двоеточиями имен файлов , которые оболочка периодически проверяет наличие новой почты .
Каждая запись списка может указывать сообщение, которое печатается при поступлении новой почты в почтовом файле , путем отделения имени файла от сообщения символом '?'. При использовании в тексте сообщения '$ _' заменяется именем текущего почтового файла.
Пример:
$ MAILCHECK=1 MAILPATH='/tmp/a?New mail in <$_>' bash
bash$ echo test >> /tmp/a
New mail in </tmp/a>
Попробуйте этот простой пример:
echo "$_"
echo "test"
echo "$_"
Запустите его, указав абсолютный путь ( /home/$USERNAME/test.sh
); вывод:
/home/$USERNAME/test.sh
test
test
Первый $ _
содержит путь, который вы использовали для вызова скрипта, а второй - первый аргумент среднего echo
.
Для третьего элемент в списке, если вы запустите новый терминал и наберете echo $ _
, он покажет переменную, содержащую ПУТЬ
, которая обычно используется для поиска и вызова команд (на моем компьютере с Ubuntu) в обычной оболочке или по абсолютному пути к вашему файлу .bashrs
в оболочке входа в систему.
Для четвертого элемента со страницы руководства bash:
При использовании в тексте сообщения
$ _
заменяется именем текущего почтового файла .
Для случая 2 пример стоит тысячи слов:
mkdir my_long_dir
cd $_
Делает то, на что вы догадываетесь/надеетесь. Дает мне простой заполнитель, когда я нахожусь в командной строке, чтобы мне не приходилось повторяться.