Как запустить командный блок в основной оболочке? [дубликат]

Выражаясь (надеюсь, более простыми) терминами, это означает. Каталог - это setgid. Любые файлы, созданные там, будут принадлежать этой группе владельца этой папки.

Однако эта папка не может быть исполнена группой, поэтому она отображается с заглавной буквы S. Обычно это происходит, когда каталог создается, и в конечном итоге каталог будет иметь значение setgid.

Хм .. Не уверен, что это действительно звучало как обычный английский выше ..

8
22.05.2017, 18:19
2 ответа

Вместо ( something ), который запускает somethingв подоболочке, используйте { something ; }, который запускает somethingв текущей оболочке

Вам нужны пробелы после {, а также;(или новая строка )перед }.

Пример:

$ { echo "hello $BASHPID";sleep 5;echo "hello again $BASHPID" ; }
hello 3536
hello again 3536

Обратите внимание, однако, что если вы запускаете некоторые сложные команды (или конвейерные команды ), большую часть времени они все равно будут находиться в подоболочке.

И "портативный" способ получить pid вашей текущей оболочки $$.

Поэтому я бы вместо этого написал ваш тест как:

{ echo "hello $$"; sleep 5 ; echo "hello again $$" ; }

(сон в любом случае здесь бесполезен)

10
27.01.2020, 20:08

Зависит от того, что вы подразумеваете под в целом .

Если вы имеете в виду только отправку нескольких команд в оболочку и убедитесь, что оболочка не начнет их выполнять, пока вы не введете их все, то вы можете просто:

cmd1; cmd2

Или

cmd1Ctrl+VCtrl+Jcmd2

(или включите вставку в квадратных скобках -(bind 'set enable-bracketed-paste on')и вставьте команды с терминала, который поддерживает вставку в квадратных скобках ).

Или:

{
cmd1
cmd2
}

Иметь их на нескольких линиях.

Если вы хотите сгруппировать их, например, чтобы они использовали один и тот же стандартный ввод или стандартный вывод, вы можете использовать:

{ cmd1; cmd2; } < in > out

или

eval 'cmd1; cmd2' < in > out

Если вы хотите, чтобы они запускались со своими собственными переменными и параметрами, поскольку bashне имеет эквивалента zshанонимных функций, вам нужно определить временную функцию:

f() { local var; var=foo; bar;}; f
12
27.01.2020, 20:08

Теги

Похожие вопросы