我很难理解如何在 shell 脚本中使用文件描述符。
我知道基础知识,例如
exec 5 > /tmp/foo
Run Code Online (Sandbox Code Playgroud)
所以 fd 5 附加到 foo 用于写入。
exec 6 < /tmp/bar
Run Code Online (Sandbox Code Playgroud)
……阅读。
exec 5>&-
Run Code Online (Sandbox Code Playgroud)
...关闭fd。
这有什么作用呢?
#!/bin/bash
exec 5 > /tmp/foo
exec 6 < /tmp/bar
cat <&6 | while read a
do
echo $a >&5
done
Run Code Online (Sandbox Code Playgroud)
据我所知,&5
关闭了 fd,那么每次调用后输出仍然如何成功重定向?
这是复制意大利面来自:这里
它声称在简单的echo $a > file
情况下使用它会使其更快,但我无法理解。我将不胜感激任何指向体面教程的链接。我的谷歌权力似乎让我失望。
echo "AXIS2C_HOME=/usr/local/Axis2C" | sed 's/\(^AXIS2C_HOME=\) \(.*\)/ \2 \1/'
Run Code Online (Sandbox Code Playgroud)
我期待的输出是/usr/local/Axis2C AXIS2C_HOME=
.
我无法弄清楚我做错了什么。:(
我正在尝试使用规范文件中的 BuildPrereq 标志来解决问题。如果操作系统是特定版本,我希望包含一些先决条件。就像是
if os == fedora 4
BuildPrereq >= apr0.9
endif
if os == feodra 10
BuildPrereq >= apr2.0
endif
Run Code Online (Sandbox Code Playgroud)
有没有办法实现上述目标?我也想听到一些关于这个的替代方案。问题是我有一段代码不需要在几个版本的操作系统上编译。所以我正在考虑混合条件编译和上述内容。
干杯!
我有一个规范文件,它解压缩了一个库,该库部署在 shell 中导出的位置。
IE
%file
${AXIS2_C}/bin/services/services.xml
Run Code Online (Sandbox Code Playgroud)
这失败了:
error: File not found: root/rpmbuild/BUILDROOT/i386/${AXIS2_C}/bin/services/services.xml
Run Code Online (Sandbox Code Playgroud)
即 shell 变量不会被扩展。有没有办法解决 ?
谢谢!
我无法通过将 cron 作业放置在 /etc/cron.hourly 文件夹中来配置它来运行。
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
Run Code Online (Sandbox Code Playgroud)
cron.hourly 下的文件是:
lrwxrwxrwx 1 root root 40 2010-07-26 14:52 check -> /usr/local/xxxx/check-interface.bash
Run Code Online (Sandbox Code Playgroud)
文件权限:
-rwxr-xr-x 1 root root 1.6K 2010-09-13 11:22 /usr/local/xxxx/check-interface.bash
Run Code Online (Sandbox Code Playgroud)
var/log/cron 日志文件中似乎没有报告错误。没有提到脚本。:(