Articles of bash

在bash脚本中调用程序?

我是bash新手,似乎无法得到它编译一些C代码没有恼人的消息。 我在引用时确定它是分号,因为如果我删除或更改它们,它将几乎中断。 我得到的警告/错误是“:未find::”没有别的重复每行。 任何帮助表示赞赏。 #!/bin/bash GCC=/usr/bin/gcc ; INSERTS="10000 20000 50000 100000 150000 250000 375000 500000 750000 1000000" CODESRC=./code.c; #compile with options $GCC -DDEBUG -o codetest $CODESRC; #run with parameters ./codetest $INSERTS; 编辑: 代码编译并运行良好。 如果我删除所有的分号,并尝试使用sh test.sh运行它,我得到以下。 test.sh: 6: /usr/bin/gcc : not found test.sh: 8: ./codetest: not found 编辑:啊,傻我; 这是一个Windows / Unix的结局问题,运行./test.sh和得到/bin/bash^M: bad interpreter

在Linux中forfiles.exe等效

对不起,如果这之前问,但我很好奇什么是forfiles.exe在Windows中等效的Linux命令? 当我看到这个问题时,我想起了这个问题

与netcat同步服务

这个命令将通过netcat持久地将它的输出 – 从apache服务器的所有命中 – 到浏览器: while true; do grep `date +%d\\/%b` /var/log/apache/access.log | nc -q1 -l -p8080; done 这是超级酷,但我有一个宠物与它的工作方式:grep运行,其输出坐在hibernate,直到有人要求它。 这有两个含义: 没有办法使用请求头来改变服务 当天的第一个请求将始终服务于昨天的结果 ,因为自上次请求以来,grep输出已经在那里了。 连续的两个即时请求是唯一的方法来确定你正在得到更新的输出。 我的问题是: 有没有办法解决这个问题 ? 我很less意识到用mknod等手段制作背水pipe,但经过一些严重的谷歌search和手工阅读,我不能真正弄清楚是否有一个解决scheme,我没有看到由于缺乏经验,或者如果我只是试图做一些unixpipe道工作不可行的方法。 编辑 :我在man nc看到-e开关可以用来“执行指定的命令,使用stdin的networking数据,并发送stdout和stderr到networking。 它继续解释这只有在GAPING_SECURITY_HOLE (lol)编译时间选项被启用时才有效,这是有道理的。 所以现在我想知道,这是我实际上想要完成的非常不安全的行为,还是有一个安全的中间地带? 也许只做#2(以上)是安全的,但#1不会。 尚未确定。 编辑#2 :也许有一些与命名pipe道 ?

如何从另一个脚本调用一个bash脚本,作为一个不同的用户?

可能重复: 以不同的用户身份运行一个shell脚本 在编写脚本来自动化SVN镜像仓库( svnsync )的初始化时,我又遇到了一些问题,试图用另一个用户的权限启动另一个脚本 。 #!/bin/sh # This outer script is always run with root privileges ("sudo create-repo.sh") # Create repository, set privileges, etc […] # Set up remote mirror; this works fine! (SSH key authentication) ssh svnsync@anotherserver /var/lib/svn/init-mirror.sh $REPO # Set up local mirror as "svnsync" user # ??? 我如何在同一台机器上调用另一个脚本作为另一个用户? 请注意,外部脚本始终以root用户身份执行,因此任何用户都不应该成为问题。 我尝试了这样的: su […]

在许多其他脚本具有的eval函数的bash别名中输出?

我没有太多的export经验,但给我的印象是与eval非常相似。 我错了吗?

我的期望脚本有什么问题?

我试图学习如何使用expect命令,帮助我通过shell脚本自动部署一些软件,并且我想到了一些简单的东西来让我开始。 我在我家的dir中创build了一个名为'foo'的文件,使用: touch foo 我创build了以test.exp保存的以下脚本 #!/usr/bin/expect spawn rm -i foo expect "rm: remove regular empty file `foo'?" send "y\r" 当我使用./test.exp运行脚本时,它产生了rm命令,但是它似乎没有发送Y和回车符。 我知道在期望string中没有input错误,因为我已经使用复制和粘贴来放置脚本。 我究竟做错了什么?

刷新设备 – 通过脚本重新连接CF卡驱动器(相当于拔下插头)

我把一个完全干净的CF卡插入我的USB写卡器。 然后我把一个512字节大小的MB块分配给设备,其中包含分区表和一个分区的定义。 问题:当“fdisk -l / dev / sdx”正确地显示分区时,在这些操作之后(因为它以前没有),发生没有像“/ dev / sdx1”这样的设备。 拔下并插入卡片写卡器可以解决问题,并使设备出现。 因为我在脚本中使用这个过程,所以手动拔出和重新插入是没有任何select的。 有没有办法“刷新”设备或通过脚本“拔下并重新插入”驱动器,使/ dev / sdx1出现? 谢谢你的帮助, 克里斯

将旧的设置/环境应用于新服务器的最佳方式是什么?

假设你有zsh,vim,screen等你喜欢的设置,在某些方块上performance出你想要的样子。 将这些设置/环境应用于新服务器的最佳方式是什么? 假设所有必要的软件都安装在同一个发行版上。

Postgresql基础备份脚本

我正在使用以下脚本来执行Postgresql的文件级备份。 我有时会看到最后一部分,在调用“pgs_backup_stop”之后进行清理,在等待最后一个WAL被创build时挂起。 search的REF_FILE有时是错误的。 我还通过rsync将这些文件发送到不同的机器,每5分钟一次。 其他人如何安全删除旧的WAL文件? #!/bin/bash PGDATA=/usr/local/pgsql/data WAL_ARCHIVE=/usr/local/pgsql/archives PGBACKUP=/usr/local/pgsqlbackup PSQL=/usr/local/pgsql/bin/psql today=`date +%Y%m%d-%H%M%S` label=base_backup_${today} echo "Executing pg_start_backup with label $label in server … " CP=`$PSQL -q -Upostgres -d template1 -c "SELECT pg_start_backup('$label');" -P tuples_only -P format=unaligned` RVAL=$? echo "Begin CheckPoint is $CP" if [ ${RVAL} -ne 0 ] then echo "PSQL pg_start_backup failed" exit 1; fi […]

Bash脚本:检查命令列表

我有一个bash脚本,用这样的命令列表启动一个ps命令: comando="ps -o pid,pcpu,cmd -C \"$2\"" $ 2必须是这种forms的variables: command1或command1 command2 command3 … commandn 我怎样才能检查这个variables,以避免错误? 我需要一个控制(与if)来检查模式。 编辑: ps可以这样调用: ps -o pid,pcpu,cmd -C "command1 command2 … commandn" 。 如果有人以script.sh -C " command1 command2"调用这个bash脚本,ps命令返回“IMPROPER LIST”。 我想在启动ps命令之前避免ps错误并回显我的错误。