Выражаясь (надеюсь, более простыми) терминами, это означает. Каталог - это setgid. Любые файлы, созданные там, будут принадлежать этой группе владельца этой папки.
Однако эта папка не может быть исполнена группой, поэтому она отображается с заглавной буквы S. Обычно это происходит, когда каталог создается, и в конечном итоге каталог будет иметь значение setgid.
Хм .. Не уверен, что это действительно звучало как обычный английский выше ..
Вместо ( 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 $$" ; }
(сон в любом случае здесь бесполезен)
Зависит от того, что вы подразумеваете под в целом .
Если вы имеете в виду только отправку нескольких команд в оболочку и убедитесь, что оболочка не начнет их выполнять, пока вы не введете их все, то вы можете просто:
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