Articles of bash

如何定期从文件中删除所有内容而不删除它

我需要定期清空文本文件而不删除它(我知道它有多less行)。 我试过这个: 创build一个执行以下脚本的cron other lines from the script here sed '1,14d' file.txt>file.txt 如果我从terminal运行它工作正常,但是当我运行cron它执行第一部分(“脚本的其他行”这一部分),但它不会清空该文件。 注意:该文件有777个权限,所以我不认为它是权限相关的。

如何从$(我是谁)中提取主机名

我尝试从下面的string中提取主机名(使用who am i创build的): username pts/0 2010-10-05 17:30 (www.example.com) 我需要一个解决scheme,如果(www.example.com)不存在,也是我在本地login的情况下也可以工作。 此外,解决scheme还必须在Mac上工作who am i返回以下string: username ttys006 Oct 5 16:47 (www.example.com) 问题是mac在date中放置空格,这使得难以使用cut 。 我认为,必须有一个解决scheme使用sed来提取子string,但我有问题搞清楚如何适当使用sed 。 更新:疯狂的方法 如果实际上存在括号,这种方法才会奏效。 如果不是,则会发生以下情况: $ who am i | cut -f2 -d '(' | tr -d ')' username ttys006 Oct 5 16:47

如何避免./执行shell脚本时?

我曾经知道一种方法来运行我的shell脚本,只要input那里的名字,只要在我的home文件夹或桌面。 我讨厌input./myscript.sh 。 我想能够只inputmyscript.sh 。 我怎样才能修理我的terminal来做到这一点? 我使用的是GNOME Terminal和Ubuntu 9.04。

Bash 1class轮:如何制作每个小时00到23的目录?

一个进程将写入一组目录,每一个小时使用date+%H表示法,所以00,01,02 … 22,23。我想保持个位数小时的前导0sorting清单整齐。 I = 00; 直到[$ I -gt 23]; 做mkdir $我; 让我= I + 1; DONE 有可预见的影响,不保持领先的0之前的个位数。 我可以去手工制作,但觉得应该有办法做到这一点。 有任何想法吗?

以健壮的方式自动维护linuxconfiguration文件(如syslog.conf)中的条目

有时我想自动添加一个configuration到一个conf文件,我可以在后面以脚本方式删除,例如我想暂时让10台主机login到远程系统日志服务器。 所以我在剧本里是这样的 ##some other commands echo "kern.* @syslog.server.local" >> /etc/syslog.conf service syslogd restart 不过经常更新一些其他的命令并再次运行脚本。 显然这不是幂等的,我不能重新应用它没有一些grep /删除jiggerpokery,我不能轻易地删除它。 所以我已经采取了这样的事情; cat <<HEREDOC >>/etc/syslog.conf ###some unique string### echo "kern.* @syslog.server.local" ###end some unique string### HEREDOC 这使我可以做到这一点,使操作可重复… sed -e 's/###some unique string###(*)###end some unique string###/replacement/g' /tmp/syslog.conf > /tmp/syslog.conf cat <<HEREDOC >>$dfile ###some unique string### echo "kecrn.* @syslog.server.local" ###end some unique […]

为什么rc.local需要绝对path? 我怎样才能在启动时运行脚本不使用它们?

我有一个在CentOS中从rc.local启动的脚本。 这个脚本包含一个命令来使用称为rebar的第三方构build命令来编译我的erlang项目。 钢筋行在启动时没有编译我的项目,但是如果我手动运行它,项目编译就可以了。 我认为这是因为rebar命令调用没有绝对path的其他命令。 如何在启动时运行命令,但是在不需要绝对path的环境中运行? 我不想修补这个第三方命令(并处理出现混乱的不可避免的官僚作风)和/或保留我自己的项目并行分支来维持这个额外的function。 我也很好奇为什么我不能谷歌这一点。 似乎必须经常出现,所以人们希望在rc.local中使用本身不使用全部绝对path命令调用的命令。 而且,我觉得答案应该是微不足道的,因为我可以在启动后马上login并运行任何我喜欢的命令,作为root用户,rc.local也是运行的用户! 是不是有一个钩子,你可以在“是的,我们现在真的启动了,我们运行这个脚本作为一个完全同行的用户在系统上没有任何限制”的上下文中运行一个脚本? 这不是我第一次遇到这个问题,我很想知道发生了什么事情。 编辑: (我不会等待8个小时来回答我自己的问题,所以…) 那么,它看起来像设置PATH的作品。 我觉得我已经有了一个印象,即在调用bash脚本之后,在rc.local及其子目录下的命令不会在PATH中search,但这是错误的。 (@TiZon给了我一个很好的线索)。我得到这个印象的原因是因为每个Google的结果都告诉提问者在命令调用中使用绝对path,即使除了依赖于第三方命令的简单脚本或脚本之外的任何东西那不遵循这个规则。 相反,答案是用合适的shebang行来调用bash脚本,在常规会话期间通过回显它来找出正常环境的PATH,然后将启动bash脚本中的PATH设置为常规环境的PATH。 希望这个答案能够在Google中浮出水面,帮助其他一些可怜的人失去灵魂。

如何防止GNU屏幕扩展到空格标签?

使用正常的bash提示echo -e 'hello\tworld'会产生一个真正的标签。 然而,在GNU屏幕中运行相同的命令会在两个单词之间留出空格。 我已经在Ubuntu 10.04上用屏幕版本4.00.03jw4(FAU)2006年5月2日和RHEL 5.5对屏幕版本4.00.03(FAU)进行了testing23-Oct-06 有没有办法让屏幕输出制表符而不是将其转换为空格?

如何在用户login到备用组时更改umask?

我希望umask在用户切换到非默认组时更加宽容。 只是为了certificate我的意思: $ id uid=500(beamin) gid=500(beamin) groups=10(wheel) $ umask 0022 $ sg wheel $ umask # I want this to now be 0002 instead 0022 我正在考虑添加一个脚本到/etc/profile.d/看起来像这样: if [ "`id -u`" -ge 500 ] && [ "`id -g`" -ne "`id -u`" ]; then umask 0002 fi 我得到了500因为我们所有的用户uid都大于或等uid 。 这是做这件事的最好方法吗? 还是有人有更有意义的东西?

如何在sshlogin后在远程服务器上自动定义函数和别名

我想在login时自动在远程shell中定义bash函数和别名。 我不能把这些定义放到.profile或类似的地方,因为我login的用户经常与使用相同系统的其他用户共享,而我无法控制这个。 我想要做的是在远程进程中执行几个bash函数定义,然后继续作为loginshell。 我试过这个,但没有奏效: cat ~/.profile – | ssh -tt user@host bash -l 有任何想法吗?

Linux-权限被拒绝?

我正在安装Neo4j服务器作为一个Linux服务,但是当我安装它,我得到以下消息: /sbin/insserv: Permission denied 这是什么? 我该怎么办? 我用sudo运行所有的东西。 更新 – scheme : 我第一次正确安装了它,但后来我把neo4j目录移到了不同​​的位置。 neo4j服务现在不被识别。 我从/etc/init.d删除了neo4j-service,然后运行update-rc.d -f neo4j-service remove 当我重新安装它说/sbin/insserv没有这样的目录,所以我GOOGLE了,做到这一点: ln -s /usr/lib/insserv/insserv /sbin/insserv 现在当我重新安装它 – 它说/sbin/insserv: Permission denied 使用Ubuntu 。 etc / sudoers : # # This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ […]