运行 程序仅在安装时安装,否则忽略它们
Running programs only if they are installed, and ignoring them otherwise
编写 shell 脚本时,是 运行 程序的成语或 swift 方式 仅 如果已安装,并且如果不是,就随它去吧(或者以除安装之外的其他方式处理错误)?
更具体地说,我有很多通过 ssh
访问的服务器,每当我得到一个新服务器时,我只需将所有 rc 文件复制到它。 .zshrc 启动 tmux
除非它已经 运行ning。一些服务器(不是全部)没有安装 tmux
。由于磁盘 space 的限制,我不想安装它,我不想为不同的服务器使用不同的 rc 文件,我也不希望我的 rc 文件在执行时被中断。
我已经看到涉及 apt-cache policy <package-name>
的解决方案,所以我想我可以使用它并将其通过管道传输到 grep -e 'Installed: (none)'
之类的东西,但那会假设服务器是 运行ning Debian或 Ubuntu,我做不到,它只适用于使用 apt
安装的包,不适用于我以其他方式安装的包。
这可能会有所帮助-
1) 假设 tmux 在 PATH 中可用(因为它必须是可执行的)
isAvailable=$(type -P tmux)
if [[ -x $isAvailable ]]; then
...
2) 验证文件是否存在于特定路径上(复制所有 rc 文件)
export FILEPATH="..."
if[[ -f $FILEPATH ]]; then
command -v <command>
是检查命令是否可以执行(可执行且在 $PATH
上)的常用(和 POSIX)方法。
例如:
command -v tmux >/dev/null &&
tmux a -t name
(>/dev/null
因为,如果命令存在,它的路径将打印到 STDOUT。)
将其放入可重用函数中可能会很好:
maybe() {
! command -v "" >/dev/null ||
"$@"
}
然后可以使用:
maybe tmux a -t name
如果 tmux
可用,则 tmux a -t name
将是 运行,否则将被静默忽略。
或者,如果您在命令不可用时需要一些反馈:
maybe() {
if command -v "" >/dev/null
then
"$@"
else
printf 'Command "%s" not available, skipping\n' "" >&2
fi
}
编写 shell 脚本时,是 运行 程序的成语或 swift 方式 仅 如果已安装,并且如果不是,就随它去吧(或者以除安装之外的其他方式处理错误)?
更具体地说,我有很多通过 ssh
访问的服务器,每当我得到一个新服务器时,我只需将所有 rc 文件复制到它。 .zshrc 启动 tmux
除非它已经 运行ning。一些服务器(不是全部)没有安装 tmux
。由于磁盘 space 的限制,我不想安装它,我不想为不同的服务器使用不同的 rc 文件,我也不希望我的 rc 文件在执行时被中断。
我已经看到涉及 apt-cache policy <package-name>
的解决方案,所以我想我可以使用它并将其通过管道传输到 grep -e 'Installed: (none)'
之类的东西,但那会假设服务器是 运行ning Debian或 Ubuntu,我做不到,它只适用于使用 apt
安装的包,不适用于我以其他方式安装的包。
这可能会有所帮助-
1) 假设 tmux 在 PATH 中可用(因为它必须是可执行的)
isAvailable=$(type -P tmux)
if [[ -x $isAvailable ]]; then
...
2) 验证文件是否存在于特定路径上(复制所有 rc 文件)
export FILEPATH="..."
if[[ -f $FILEPATH ]]; then
command -v <command>
是检查命令是否可以执行(可执行且在 $PATH
上)的常用(和 POSIX)方法。
例如:
command -v tmux >/dev/null &&
tmux a -t name
(>/dev/null
因为,如果命令存在,它的路径将打印到 STDOUT。)
将其放入可重用函数中可能会很好:
maybe() {
! command -v "" >/dev/null ||
"$@"
}
然后可以使用:
maybe tmux a -t name
如果 tmux
可用,则 tmux a -t name
将是 运行,否则将被静默忽略。
或者,如果您在命令不可用时需要一些反馈:
maybe() {
if command -v "" >/dev/null
then
"$@"
else
printf 'Command "%s" not available, skipping\n' "" >&2
fi
}