Почему этот код не помогает мне получить пустую доску с крестиками?

Чтобы увеличить принятый ответ с кратким кратким ответом на новичок, вам, вероятно, не понадобится 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 следует перенаправление вместо имени команды.

-2
задан Michael_B 5 March 2019 в 00:19
поделиться

2 ответа

Попробуйте этот код.

таблица {поле: авто; border: solid // вы забыли эту строку в своем коде, поместите эту строку для отображения границы. }

0
ответ дан BlackHole 5 March 2019 в 00:19
поделиться

Вы не определяете их правильно. Смотрите следующую вилку или фрагмент:

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;
}
0
ответ дан Mukyuu 5 March 2019 в 00:19
поделиться