Чтобы увеличить принятый ответ с кратким кратким ответом на новичок, вам, вероятно, не понадобится exec
.
Если вы все еще здесь, следующее обсуждение должно, мы надеемся, объяснить, почему. Когда вы запустите, скажем,
sh -c 'command'
, вы запустите экземпляр sh
, а затем запустите command
в качестве дочернего экземпляра этого экземпляра sh
. Когда command
заканчивается, экземпляр sh
также заканчивается.
sh -c 'exec command'
запускает экземпляр sh
, затем заменяет , что экземпляр sh
с command
бинарный, и вместо этого выполняется.
Конечно, обе эти функции бесполезны в этом ограниченном контексте; вы просто хотите
command
. Есть некоторые ситуации, в которых вы хотите, чтобы оболочка считывала свой файл конфигурации или каким-то иным образом настраивала среду в качестве подготовки к запуску command
. Это в значительной степени единственная ситуация, когда полезен exec command
.
#!/bin/sh
ENVIRONMENT=$(some complex task)
exec command
Это делает некоторые вещи для подготовки среды, чтобы она содержала то, что необходимо. Как только это будет сделано, экземпляр sh
больше не нужен, и поэтому (небольшая) оптимизация просто заменит экземпляр sh
на процесс command
, а не sh
запустит его как дочерний процесс и дождитесь его, а затем выйдите, как только он закончится.
Точно так же, если вы хотите высвободить как можно больше ресурсов для тяжелой команды в конце скрипта оболочки, вы можете захотеть exec
, что команда в качестве оптимизации.
Если что-то заставляет вас запускать sh
, но вы действительно хотели запустить что-то еще, exec something else
, конечно, обходным путем для замены нежелательного экземпляра sh
(например, например, если вы действительно хотели запустить свой собственный spiffy gosh
вместо sh
, но ваш не указан в /etc/shells
, поэтому вы не можете указать его как свою оболочку входа.)
Второе использование exec
для управления файловыми дескрипторами - отдельная тема. В принятом ответе это хорошо сказано; чтобы сохранить это самодостаточным, я просто отнесусь к руководству для чего-либо, где за exec
следует перенаправление вместо имени команды.
Попробуйте этот код.
таблица {поле: авто; border: solid // вы забыли эту строку в своем коде, поместите эту строку для отображения границы. }
Вы не определяете их правильно. Смотрите следующую вилку или фрагмент:
tr td{
width:100px;
height: 100px;
}
tr td{
border-right: 5px solid black;
border-bottom: 5px solid black;
}
tr td:last-child{
border-right:0;
}
tr:last-child td{
border-bottom:0;
}
body{
text-align: center;
}
table{
margin: auto;
}
<h1>Tic Tac Toe</h1>
<table>
<tr>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>
Логика: [1110 ] Установите все tr td
с правой и нижней границей, кроме последней.
tr td{
border-right: 5px solid black;
border-bottom: 5px solid black;
}
tr td:last-child{
border-right:0;
}
tr:last-child td{
border-bottom:0;
}