我有一个备份脚本,我需要在一天的特定时间运行它,所以我正在使用cron这个任务,并且从 cron 中我也试图将备份脚本的输出重定向到logfile.
crontab -e
*/1 * * * * /home/ranveer/backup.sh &>> /home/ranveer/backup.log
Run Code Online (Sandbox Code Playgroud)
在上面的 cron 条目中,我将两者都重定向stderr and stdout到日志文件。
上面的 cron 作业执行得很好syslog ,它执行backup.sh文件中提到的任务,但它没有向日志文件写入任何内容。
/var/log/syslog
Oct 19 20:26:01 ranveer CRON[15214]: (ranveer) CMD (/home/ranveer/backup.sh &>> /home/ranveer/backup.log)
Run Code Online (Sandbox Code Playgroud)
当我从 cli 运行脚本时,它会按要求工作并将输出写入日志文件
ranveer@ranveer:~$ ./backup.sh &>> backup.log
ranveer@ranveer:~$ cat backup.log
Fri Oct 19 20:28:01 IST 2012
successfully copied testdir
test.txt successfully copied
-------------------------------------------------------------------------------------
ranveer@ranveer:~$
Run Code Online (Sandbox Code Playgroud)
那么,为什么文件的输出没有从 cron 中重定向到文件。
我在任何地方看到有人需要获得一个排序的、唯一的列表,他们总是通过管道传输到sort | uniq. 我从未见过有人使用的例子sort -u。为什么不?有什么区别,为什么使用 uniq 比使用 unique 标志进行排序更好?
我正在尝试使用 curl 命令访问!路径中带有感叹号 ( )的 http url 。例如:
curl -v "http://example.org/!287s87asdjh2/somepath/someresource"
Run Code Online (Sandbox Code Playgroud)
控制台回复bash: ... event not found.
这里发生了什么?逃避感叹号的正确语法是什么?
我有多个文件在前 5-10 行中包含 ascii 文本信息,然后是列表良好的矩阵信息。在 shell 脚本中,我想删除前几行文本,以便我可以在另一个程序中使用纯矩阵信息。如何使用 bash shell 命令来执行此操作?
如果有任何帮助,我正在使用 RedHat 和 Ubuntu linux 系统。
过去的旧建议是对任何涉及 a 的表达式加双引号$VARIABLE,至少在希望 shell 将其解释为单个项目的情况下,否则,内容中的任何空格$VARIABLE都会脱离 shell。
但是,我知道在较新版本的 shell 中,不再总是需要双引号(至少出于上述目的)。例如,在bash:
% FOO='bar baz'
% [ $FOO = 'bar baz' ] && echo OK
bash: [: too many arguments
% [[ $FOO = 'bar baz' ]] && echo OK
OK
% touch 'bar baz'
% ls $FOO
ls: cannot access bar: No such file or directory
ls: cannot access baz: No such file or directory
Run Code Online (Sandbox Code Playgroud)
在zsh,而另一方面,同样的三个命令成功。因此,基于此实验,似乎在 中bash可以省略 内部的双引号[[ ... ]],但不能省略内部 …
我编写了一个在本地执行时运行良好的脚本:
./sysMole -time Aug 18 18
Run Code Online (Sandbox Code Playgroud)
参数"-time"、"Aug"、"18"和"18"成功传递给脚本。
现在,这个脚本被设计为在远程机器上执行,但是从本地机器上的本地目录执行。例子:
ssh root@remoteServer "bash -s" < /var/www/html/ops1/sysMole
Run Code Online (Sandbox Code Playgroud)
这也很好用。但是当我尝试包含上述参数(-time Aug 18 18) 时,问题就出现了,例如:
ssh root@remoteServer "bash -s" < /var/www/html/ops1/sysMole -time Aug 18 18
Run Code Online (Sandbox Code Playgroud)
运行该脚本后,我收到以下错误:
bash: cannot set terminal process group (-1): Invalid argument
bash: no job control in this shell
Run Code Online (Sandbox Code Playgroud)
请告诉我我做错了什么,这非常令人沮丧。
我可以读取数字和操作:
echo "First number please"
read num1
echo "Second number please"
read num2
echo "Operation?"
read op
Run Code Online (Sandbox Code Playgroud)
但随后我所有添加数字的尝试都失败了:
case "$op" in
"+")
echo num1+num2;;
"-")
echo `num1-num2`;;
esac
Run Code Online (Sandbox Code Playgroud)
跑:
First number please
1
Second mumber please
2
Operation?
+
Run Code Online (Sandbox Code Playgroud)
输出:
num1+num2
Run Code Online (Sandbox Code Playgroud)
...或者...
echo $num1+$num2;;
# results in: 1+2
Run Code Online (Sandbox Code Playgroud)
...或者...
echo `$num1`+`$num2`;;
# results in: ...line 9: 1: command not found
Run Code Online (Sandbox Code Playgroud)
当我尝试添加添加(“2+2”而不是“4”)时,似乎我仍然得到字符串。
我在 Unix 和 Linux 以及其他使用短语“反引号已被弃用”的站点上多次看到此评论,这与 Bash 和 Zsh 等 shell 相关。
这个说法是真的还是假的?
我想搜索不符合 2 个-name条件的文件。我可以这样做:
find /media/d/ -type f -size +50M ! -name "*deb" ! -name "*vmdk"
Run Code Online (Sandbox Code Playgroud)
这将产生正确的结果,但我可以用 OR 以某种方式加入这两个条件吗?
我有一个tmp.txt包含要导出的变量的文件,例如:
a=123
b="hello world"
c="one more variable"
Run Code Online (Sandbox Code Playgroud)
如何使用export命令导出所有这些变量,以便子进程以后可以使用它们?