我一直假设当 curl 收到 HTTP 500 响应时,它会返回一个退出代码,这意味着失败 (!= 0),但事实并非如此。
如果 HTTP 状态代码不是 200,有没有一种方法可以使 cURL 失败,并且退出代码不同于 0?我知道我可以使用,-w "%{http_code}"但这将它放在 STDOUT 中,而不是作为退出代码(此外,我也对捕获输出感兴趣,我不想重定向到文件,而是重定向到屏幕)。
我每五分钟就有一个crontab那个wgetPHP 页面(只是为了运行一些 PHP 代码),我想将请求的输出发送到标准输出,同时将正常wget输出发送到/dev/null(或以其他方式隐藏它)。我在wget手册中找不到它。
我正在寻找类似的东西:
wget -o stdout http://whatever.com/page.php > /dev/null
Run Code Online (Sandbox Code Playgroud)
有人知道吗?
我有一个 Linux 程序,它可以将信息写入 stdout 和 stderr。
我有一个 shell 脚本,可以将该输出重定向到/var/log. (通过>>和2>&1。)
有没有办法让日志文件轮换?(最大大小,然后切换到不同的文件,只保留有限数量的文件)
我看过一些谈论该logrotate程序的答案,听起来不错,但它们似乎也专注于在内部生成日志文件并处理 HUP 信号的程序。有没有办法使用基本的输出重定向脚本来完成这项工作?
执行以下操作的惯用方法是什么
我的解决方案是
tar --to-stdout .. | tar -C somefolder -xvf -
但可能有更惯用的方法来做到这一点。
我正在 Windows 中编写一个 C 程序,我的 printf 调用打印到命令行,我知道我可以使用以下命令将所有这些输出重定向到一个文本文件:
myProgram.exe > mylog.txt
Run Code Online (Sandbox Code Playgroud)
但是,我还希望看到本应打印到控制台的输出,并将其全部记录在文本文件中。
有没有办法做到这一点?我正在考虑使用tail来监视日志文件。
我有一个 .gz sql 转储文件(例如:foo.sql.gz),我想使用经典的 mysql 命令将其导入到我的数据库中。
gunzip -c foo.sql.gz > foo.sql
mysql -uroot -ppassword foo < foo.sql
Run Code Online (Sandbox Code Playgroud)
foo 是数据库。
如何在一个命令中管理这两个命令?
试过
gunzip -c foo.sql.gz | mysql -uroot -ppassword foo
Run Code Online (Sandbox Code Playgroud)
但似乎不起作用;我明白了gzip: stdout: Broken pipe
我有一个 python 程序,它正在慢慢地生成一些输出。
我想在一个文件中捕获它,但我也认为我可以用尾巴观看它。
所以在一个终端中我正在做:
python myprog.py > output.txt
Run Code Online (Sandbox Code Playgroud)
并在另一个终端:
tail -f output.txt
Run Code Online (Sandbox Code Playgroud)
但是在 python 程序运行时,尾巴似乎没有向我显示任何东西。
如果我按 ctrl-c 来杀死 python 脚本,突然尾部output.txt开始填满。但不是在 python 运行时。
我究竟做错了什么?
Windows 是否提供了tee将标准输入复制到任意一组文件然后再返回到标准输出的基本工具?
我通常会下载一个通用tee程序,但是很好奇在 powershell 或类似的东西中是否存在这样的东西?
为什么有些 Linux 程序的输出既不去 STDOUT 也不去 STDERR?
实际上,我想知道如何可靠地捕获所有程序输出,无论它使用什么“流”。我的问题是有些程序似乎不让他们的输出被捕获。
一个例子是“时间”命令:
time sleep 1 2>&1 > /dev/null
real 0m1.003s
user 0m0.000s
sys 0m0.000s
Run Code Online (Sandbox Code Playgroud)
或者
time sleep 1 &> /dev/null
real 0m1.003s
user 0m0.000s
sys 0m0.000s
Run Code Online (Sandbox Code Playgroud)
为什么我两次都看到输出?我希望这一切都通过管道输入/dev/null。
时间使用的是什么输出流,我如何将其通过管道传输到文件中?
解决此问题的一种方法是创建一个Bash脚本,例如,combine.sh包含以下命令:
$@ 2>&1
Run Code Online (Sandbox Code Playgroud)
然后可以以正确的方式捕获 'time' 的输出:
combine.sh time sleep 1 &> /dev/null
Run Code Online (Sandbox Code Playgroud)
(没有看到输出 - 正确)
有没有办法在不使用单独的组合脚本的情况下实现我想要的?
stdout ×10
linux ×5
bash ×2
command-line ×2
redirection ×2
stderr ×2
curl ×1
dump ×1
exit-code ×1
gnu ×1
gunzip ×1
logrotate ×1
mysql ×1
pipe ×1
powershell ×1
shell ×1
shell-script ×1
tar ×1
wget ×1
windows ×1