mirror of
https://github.com/flokoe/bash-hackers-wiki.git
synced 2024-11-01 14:53:06 +01:00
56 lines
1.9 KiB
Plaintext
56 lines
1.9 KiB
Plaintext
|
====== Grouping commands ======
|
||
|
|
||
|
===== Synopsis =====
|
||
|
<code>{ <LIST>; }</code>
|
||
|
|
||
|
<code>
|
||
|
{
|
||
|
<LIST>
|
||
|
}
|
||
|
</code>
|
||
|
|
||
|
===== Description =====
|
||
|
|
||
|
The [[syntax:basicgrammar#lists|list]] ''<LIST>'' is simply executed in the **current** shell environment. The list must be terminated with a **newline** or **semicolon**. For parsing reasons, the curly braces must be separated from ''<LIST>'' by a **semicolon** and **blanks** if they're in the same line! ((Actually any properly terminated compound command will work without extra separator (also in some other shells), **example**: ''{ while sleep 1; do echo ZzZzzZ; done }'' is valid. But this is not documented, infact the documentation explicitly says that a semicolon or a newline must separate the enclosed list. -- thanks ''geirha'' at Freenode))((The main reason is the fact that in shell grammar, the curly braces are not control operators but reserved words -- TheBonsai))
|
||
|
|
||
|
This is known as a **group command**. The return status is the [[scripting:basics#exit_codes|exit status (exit code)]] of the list.
|
||
|
|
||
|
The input and output **filedescriptors** are cumulative:
|
||
|
<code>
|
||
|
{
|
||
|
echo "PASSWD follows"
|
||
|
cat /etc/passwd
|
||
|
echo
|
||
|
echo "GROUPS follows"
|
||
|
cat /etc/group
|
||
|
} >output.txt
|
||
|
</code>
|
||
|
|
||
|
This compound command also usually is the body of a [[syntax:basicgrammar#shell_function_definitions | function definition]], though not the only compound command that's valid there:
|
||
|
<code>
|
||
|
print_help() {
|
||
|
echo "Options:"
|
||
|
echo "-h This help text"
|
||
|
echo "-f FILE Use config file FILE"
|
||
|
echo "-u USER Run as user USER"
|
||
|
}
|
||
|
</code>
|
||
|
|
||
|
===== Examples =====
|
||
|
==== A Try-Catch block ====
|
||
|
|
||
|
try_catch() {
|
||
|
{ # Try-block:
|
||
|
eval "$@"
|
||
|
} ||
|
||
|
{ # Catch-block:
|
||
|
echo "An error occurred"
|
||
|
return -1
|
||
|
}
|
||
|
}
|
||
|
===== Portability considerations =====
|
||
|
|
||
|
|
||
|
===== See also =====
|
||
|
* [[syntax:ccmd:grouping_subshell | grouping commands in a subshell]]
|