我目前正在屏幕上运行服务器控制台程序,因为我需要阅读它并偶尔发送命令。
我想在后台将应用程序作为守护程序运行(使用 init 启动/停止它)。
我可以tail -f记录日志,但这不会让我向进程发送输入。
有什么方法可以设置它以便我可以读取和发送输入,但仍然让它在后台运行?
我还希望能够将来自不同进程的输入发送到守护程序(例如,可以发送“停止\n”命令的 shell 脚本)。
我有一个 bash 脚本,它执行如下操作:
zip -0 ../backup/backup.zip \
-r ./* \
-x \*CVS\* \
-x *Thumbs.db* \
Run Code Online (Sandbox Code Playgroud)
它备份的目录是一个 SVN 归档文件(过去它曾经是 CVS)。我一直无法让它排除 .svn 及其内容。排除 .svn 的最干净方法是什么(递归遍历整个树)?
我正在尝试编写一个简单的 bash 函数,该函数将许多文件和/或目录作为其参数。这应该:
我有一个脚本,几乎可以满足我的要求,但是排序失败了。脚本的返回值是正确的,但输出不是(未排序和重复)。如果我| sort -u按照指示取消注释该语句,则输出是正确的,但返回值始终为0.
NB 解决问题的更简单的解决方案是受欢迎的,但问题实际上是关于为什么我的代码中会发生这种情况。也就是说,为什么添加管道似乎会阻止脚本增加变量r?
这是脚本:
function uniqfile
{
local r=0
for arg in "$@"
do
readlink -e "$arg" || (( ++r ))
done #| sort -u ## remove that comment
return $r
}
Run Code Online (Sandbox Code Playgroud) 取决于系统,python==python2或python== python3。
可执行的 Python 脚本,以:
#!/usr/bin/env python
#!/usr/bin/env python2
#!/usr/bin/env python3...
Run Code Online (Sandbox Code Playgroud)
对于 python py3k,它在文档中提供,我应该/可以将它与版本号一起使用,所以我这样做:
#!/usr/bin/env python3
Run Code Online (Sandbox Code Playgroud)
但是我发现 py2k 脚本有问题。
在py2k 文档中,它被编写为使用 : #! /usr/bin/env python,
在某些 *nix-es python py3k 是默认的,所以 python==python3. (例如ArchLinux python 包,这里是python 包文件)。
如何打包(配置、制作)和/或准备用于分发的 Python 脚本来处理它?
我问的是如何制作用户可以轻松运行的软件包(无需修改他们的环境)
我可以对 python py2k 脚本执行与 python py3k 脚本相同的技巧并将其设置为 :#!/usr/bin/env python2吗?我可以确定每个 python py2k 发行版都包含python2文件,所以#!/usr/bin/env python2会起作用吗?
如果是,为什么不建议将其作为标准,例如在python py2k 文档中?
我正在尝试对一些文档进行 OCR 原位(从 Windows 共享上的 linux 命令行)。OCRing 的过程是 find ,我已经使用 find 命令正确地通过循环管道传输文件。
但是我需要保留原始时间戳以进行修改。我目前正在尝试使用 stat 和 touch 如下:
#!/bin/bash
OLDIFS=$IFS
IFS=$(echo -en "\n\b")
for f in `find /mnt/library/Libra/Libra/Ashfords -name "*.pdf"`
do
ORIGTS=`stat -c "%Y" $f`
sudo /opt/ABBYYOCR9/abbyyocr9 -rl English -pi -if $f -f PDFA -paemImageOnText -pafpr original -of $f
touch -t $ORIGTS $f
done
IFS=$OLDIFS
Run Code Online (Sandbox Code Playgroud)
当然 touch 命令失败了。单独运行命令我注意到“stat -c”是这样的:
1334758696
这就像我不知道的日期。我觉得我很接近,但无法弄清楚如何将我拥有的日期转换为触摸友好版本。它是某种形式的秒数吗?
我正在运行一些单元测试代码。单元测试代码输出常规文本。有很多文本,所以我想为用户突出显示重要的关键字。
在这种情况下,关键字是“通过”和“失败”。
你如何将“通过”着色为绿色,将“失败”着色为红色?
我编写了一个循环来迭代所有.outc 二进制文件并将它们的输出复制到一个文本文件中(每个二进制文件的输出只是一行哈希值,一个程序的一行输出)。到目前为止,这是我的代码:
for j in {1..10}
do
./gcc-$j.out >> gcc-result.txt
done
Run Code Online (Sandbox Code Playgroud)
不幸的是,一些二进制文件存在一些未知问题,无法正确执行(它们卡住了,无法继续执行下一个程序)。
我不打算修复那些 c 代码,但我希望我的 bash 在给定的超时(比如 10 秒)内自动跳转到执行下一个程序,并将“0”写入gcc-result.txt.
如果您有解决此问题的想法,请提前致谢。
我有一个像下面这样的文件
var 3 2014 string
var1 4 2011 string4
var2 6 1999 string2
var3 1 2016 string6
Run Code Online (Sandbox Code Playgroud)
然后我有这个 while read 循环来将其中一列与一个数字进行比较,然后回显一些东西。然而,它没有回应我想要的短语,而是回应了别的东西。
while read num
do
if [ "$num" = "0" ]; then
echo "Number is equal to zero"
else
echo "number is not equal to 0"
fi
done < home/dir/file.txt | awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)
它不是回应上述内容,而是回应文件的第二列。
我试图制作一个非常简单的 bash 脚本来列出 375 和 3500(375、380、385...)之间的所有 5 的倍数。我尝试过但没有用的一件事是:
for i in {375..3500}
do
echo $i
(($i += 5))
done
Run Code Online (Sandbox Code Playgroud)
过了一会儿我放弃了,在大约 15 秒内用 BASIC 写了这个:
10 count = 375
20 print count
30 count = count+5
40 if count < 3500 then goto 20
Run Code Online (Sandbox Code Playgroud)
如何在 bash 脚本中制作我的 BASIC 程序?
我编写了一个脚本,当某个值不在给定范围内时会通知我。“超出范围”的所有值都记录在一组每日文件中。
每行都以专有的反向方式加时间戳:yyyymmddHHMMSS
现在,我想改进脚本,并在给定超出范围值的上次通知后至少过去 60 分钟时接收通知。
我已经解决了以相反顺序打印日志的问题:
for i in $(ls -t /var/log/logfolder/*); do zcat $i|tac|grep \!\!\!|grep --color KEYFORVALUE; done
Run Code Online (Sandbox Code Playgroud)
结果是:
...
20170817041001 - WARNING: KEYFORVALUE=252.36 is not between 225 and 245 (!!!)
20170817040001 - WARNING: KEYFORVALUE=254.35 is not between 225 and 245 (!!!)
20170817035001 - WARNING: KEYFORVALUE=254.55 is not between 225 and 245 (!!!)
20170817034001 - WARNING: KEYFORVALUE=254.58 is not between 225 and 245 (!!!)
20170817033001 - WARNING: KEYFORVALUE=255.32 is not between 225 and 245 (!!!)
20170817032001 - WARNING: KEYFORVALUE=254.99 …Run Code Online (Sandbox Code Playgroud)