我正在阅读一个示例 bash shell 脚本:
#!/bin/bash
# This script makes a backup of my home directory.
cd /home
# This creates the archive
tar cf /var/tmp/home_franky.tar franky > /dev/null 2>&1
# First remove the old bzip2 file. Redirect errors because this generates some if the archive
# does not exist. Then create a new compressed file.
rm /var/tmp/home_franky.tar.bz2 2> /dev/null
bzip2 /var/tmp/home_franky.tar
# Copy the file to another host - we have ssh keys for making this work without intervention.
scp …Run Code Online (Sandbox Code Playgroud) 我想检查工作目录中是否存在多个目录,例如dir1,dir2和dir3。
我有以下
if [ -d "$PWD/dir1" ] && [ -d "$PWD/dir2" ] && [ -d "$PWD/dir3" ]; then
echo True
else
echo False
fi
Run Code Online (Sandbox Code Playgroud)
但我怀疑有一种更优雅的方式来做到这一点。不要假设目录名称中存在模式。
目标是检查几个目录的存在和其他目录的不存在。
我正在使用 Bash,但首选可移植代码。
我了解重定向输出如何> /dev/null导致它不打印到屏幕。
但由于某种原因,这并不总是足够的,有些东西仍然会被打印出来。
在这些情况下> /dev/null 2>&1就会达到预期的结果。
然而这让我有点困惑。有人能详细解释一下这是如何工作的吗?
特别令人困惑的是这&1部分。如果我看到,&我会想到“在后台运行”。不知道1是什么意思,如果是2呢?
shell-script ×3
control-flow ×1
directory ×1
files ×1
linux ×1
null ×1
shell ×1
stderr ×1
stdout ×1