当我遇到包含此代码的答案时,我一直在寻找一种方法来检查是否使用Shell Script安装了一个程序:
hash foo 2>&- || { echo >&2 "I require foo but it's not installed. Aborting."; exit 1; }
Run Code Online (Sandbox Code Playgroud)
但该代码不是(人类)可读的,该语法的替代方案是什么?
我正在尝试创建一个小脚本来检查程序是否已安装.我正在尝试使用tmux,......
`tmux --help` | grep "tmux: command not found" &> /dev/null
if [ $? == 1 ]; then
echo "tmux is not installed"
exit
fi
Run Code Online (Sandbox Code Playgroud)
安装完tmux后,我得到:
usage: tmux [-2lquvV] [-c shell-command] [-f file] [-L socket-name]
[-S socket-path] [command [flags]]
tmux is not installed
Run Code Online (Sandbox Code Playgroud)
如果没有安装程序,请使用字符串"tmux:command not found".这可以解释为什么我grep输出tmux --help命令.是否是检查tmux是否安装的正确方法?
脚本alwais回声"未安装tmux".即使我安装了tmux.它出什么问题了?
我有一系列要执行的命令.但是,每当"找不到命令"错误发生时我都需要退出.因此,输出的执行后检查不是一个选项
"$?" 当'找不到'命令'和成功时,变量等于零.
我正在尝试自动化我们的应用程序备份.过程的一部分是检查的退出状态egrep中的if语句:
if [ ! -f /opt/apps/SiteScope_backup/sitescope_configuration.zip ] ||
[ egrep -i -q "error|warning|fatal|missing|critical" "$File" ]
then
echo "testing"
fi
Run Code Online (Sandbox Code Playgroud)
我希望它输出,testing因为文件存在并egrep返回成功,但我得到一个错误:
-bash: [: too many arguments
Run Code Online (Sandbox Code Playgroud)
我尝试了各种语法 - 附加括号,引号等但错误仍然存在.
请帮助我理解我哪里出错了.
以下内容不返回任何内容:
which asdf
Run Code Online (Sandbox Code Playgroud)
那么,为什么在这里触发if语句呢?
x=$(which asdf)
if [ -f $x ]; then echo "exists"; fi
Run Code Online (Sandbox Code Playgroud) 我在bash中有一个小脚本,它检查服务器是否是cPanel服务器
#!/bin/bash
echo "checking"
x=$(/usr/local/cpanel/cpanel -V)
if [ "$x" ]; then
echo "yes"
else
echo "no"
fi
Run Code Online (Sandbox Code Playgroud)
这很好,并提供正确的预期输出.但是,在非cPanel服务器上运行时,它还会引发以下错误:
./testcpanel.sh: line 2: /usr/local/cpanel/cpanel: No such file or directory
我想压制这个输出.
我尝试插入2>&1 /dev/null变量声明,但这不起作用.yes无论cPanel是否存在,它总是作为输出给出.
我如何抑制输出?(操作系统测试 - CentOS 6和Ubuntu 13.04)
在 Linux 上你可以使用command; 如何确定 Windows 上是否存在某个命令?
where似乎不起作用cd;我正在寻找即使在内置命令上也能工作的东西。
我使用以下命令在克隆存储库后编译了curl:
./buildconf
./configure --with-libssh2
make
sudo make install
Run Code Online (Sandbox Code Playgroud)
但是,在sudo make install之后,如果
curl -V,我得到:bash下/usr/bin/curl: No such file or directory。/usr/local/bin/curl -V,我得到:/usr/local/bin/curl: symbol lookup error: /usr/local/bin/curl: undefined symbol: curl_mime_type。我尝试通过将curl / src的路径添加到我的PATH变量来解决这个问题,这使curl命令从终端为我的用户工作。但是,如果我尝试安装php-curl,可以理解apache不会看到卷曲,而是安装了另一种。
关于如何解决此问题的任何想法?
编辑:评论中提到的另一篇文章是询问编译后在哪里可以找到可执行文件。那部分被回答了。但是,如果不将条目添加到PATH变量中,这似乎是不正确的,但是我仍然无法使curl正常工作。这就是我现在要弄清楚的部分。
我正在创建一个使用与服务器交互的外部程序的脚本。我想在尝试使用该程序之前先测试该程序是否已安装。
我查找了判断程序是否已安装的首选方法,并找到了这篇文章: How can I check if a program contains from a Bash script?
TLDR:它建议使用“command -v <prog-name>”而不是“which <prog-name>”,因为它是 POSIX 兼容的。如果找到程序,该命令应返回 0,否则返回 >0。
所以我从 System.Process 中使用readProcessWithExitCode如下
readProcessWithExitCode "command" ["-v", "<some-program>"] ""
Run Code Online (Sandbox Code Playgroud)
在 GHCI 中测试时出现以下错误
异常:命令:readCreateProcessWithExitCode:posix_spawnp:不存在(没有这样的文件或目录)
我尝试在“命令”上使用“which”。它告诉我它不存在,尽管我可以使用它,并且它的工作原理如我的终端中的手册页中所述。
这是怎么回事?我如何查看是否使用 Haskell 安装了某些内容?
一些系统信息:
我用谷歌搜索了很多解决方案,但没有找到一个完全有效的解决方案。我自己的粗略工作是:
[ $(which curl) -eq "" ] || sudo apt install curl
Run Code Online (Sandbox Code Playgroud)
这不太有效,说“预期是一元运算符”。我已经尝试过=或==,所以我不知道如何进行这样的测试。空输出是否有可能which curl是 $null 而我必须对此进行测试?
或者,有没有办法只运行sudo apt install curl然后2>&null在最后抑制它是否已经安装?