bash脚本特殊符号

例子:

cat <(ls -Al)

将括号内的命令的输出重定向到一个临时文件。所以<(ls -Al)部分等价于一个文件的路径,该文件内容即ls -Al的输出。通过realpath <(echo 'hello')可以看到,其路径类似/proc/4383/fd/pipe:[1459885]


例子:

cat > test.txt <<EOF
hello
world
EOF

hello\nworld保存到文件test.txt。其中EOF仅作分隔符,也可以使用其他字符。在没有任何编辑器的linux主机上可以通过这个方法生成多行或者含有特殊字符文件。也可以用于操作需要用户交互的命令。


例子:

echo 'hello world'
!!

重复上次执行命令。在上述例子中等价于echo 'hello world'。适合忘记加sudo的情况,可以用sudo !!执行上一条命令。


例子:

rm -- -r
gcc --help | grep -- -Wp

删除文件名为 -r 的文件。

查看 gcc 参数 -Wp 的文档。


stdoutstderr都重定向到文件。等价于command 2>&1 > filename


重定向时覆盖现有文件。


例子:

echo 'hello world' | cat -
ssh [email protected] 'tar -cf - test/' | tar -xf -

输出hello world

把远程主机 [email protected]home 目录下的test文件夹下载到本地。


例子:

cd ~
cd a/b/c/d
cd -

第三行的 cd - 表示回到~目录,可以理解为撤销上次的 cd 命令。