Articles of bash

Bash cd命令自动完成自定义别名

假设我有一个简单的函数作为cd的别名。 c(){ cd "$@"; } 我怎样才能得到 我的新function 的 cd 工作 的原始自动完成 ? 请注意, cd仅自动完成目录名称,而不是简单的文件名称。 我知道complete命令,但确切的是由cd使用的自动完成function的位置? 感谢帮助!

如何重新sorting文件内容来实现简单的混淆

如果我有一些具有可识别的签名的文件,例如幻数 ,则它们在Nautilus中被识别为文档,video或audio,而不考虑后缀。 如果我想对它们进行编码而不将编码文件本身识别为编码,则一个简单的策略可以是以块为单位重新sorting文件内容: 例如,如果文件被分割成10个相同大小的块(任何其余的可作为可变大小的第11个块, K ) ABCDEFGHIJK ,则简单编码将重新排列块顺序:例如, block_encode input_file output_file将导致输出文件组织为: BADCFEHGJIK 。 (当然,我也可以只交换“后半部分”和“前半部分”,在文件末尾留下1个字节)。 在这种情况下,解码将通过简单地再次应用编码来实现。 生成的文件很可能不会被识别为有效的文件,video,audio等 我的问题是:是否有任何简单的方法在bash中使用标准工具(例如dd )来实现这一点? (如果需要,我可以写一个C程序)。 后续将是:如果文件是一个媒体文件,我怎么能stream“解码”的内容,例如,VLC,而不必将解码的stream保存为一个文件第一?

在login时运行一次性命令(Linux)

我想每次login到我的Ubuntu机器时都打开一个ssh隧道。 .bashrc似乎是错误的地方,因为我只需要一个隧道来进行整个会话,而不是每个xterm的隧道。 init.d似乎是错误的,因为我希望为一个用户提供一个。 .bash_profile仅用于shelllogin(我认为),我也需要这个开放的GUI使用。 在哪里放置打开隧道的ssh命令,以便在login到计算机(GUI或shell)后在后台打开,并保持打开状态,直到我退出?

rdiff备份bash脚本和cron的麻烦

我有这个非常简单的bash脚本: #!/opt/bin/bash /opt/bin/rdiff-backup –force –print-statistics myhost::/var/bkp /volume1/backups/sql 2>&1 > /var/log/rdiff-backup.log; /opt/bin/rdiff-backup –force –print-statistics myhost::/var/www/vhosts /volume1/backups/vhosts 2>&1 >> /var/log/rdiff-backup.log; /opt/bin/rdiff-backup –force –print-statistics myhost::/etc /volume1/backups/etc 2>&1 >> /var/log/rdiff-backup.log; /opt/bin/rdiff-backup –force –print-statistics /volume1/homes /volume1/backups/homes 2>&1 >> /var/log/rdiff-backup.log; cat /var/log/rdiff-backup.log | /opt/bin/nail -s "rdiff-backup log" me@email.com; 如果我从命令行运行脚本,以这种方式: nohup /path/to/my/scipt.sh & 它工作正常,将每个rdiff-backup统计报告附加到rdiff-backup.log并将该文件发送到我的电子邮件地址,如预期的那样。 但是,如果我把脚本放在crontab中,那么脚本只能通过电子邮件发送一个rdiff备份作业。 我无法理解,因为脚本不能以相同的方式工作… 任何想法? 这是我的cronjob条目: 30 19 * * […]

在`.git`文件夹的新目录下,setgid位没有被保存?

我有一个纯粹的git仓库设置用户fred : /home/fred/foo.git 我已经将foo.git的每个文件的组设置为bar : $ chown -R fred:bar /home/fred/foo.git (注意fred不是组bar的成员) 我已经为foo.git每个目录设置了setgid位: $ find foo.git -type d -print0 | xargs -0 chmod g+s 但是,当fred提交到git仓库时,该组不会保留在某些文件中。 具体在objects目录我看到: foo.git/objects: drwxrws— 46 fred bar 4096 Apr 7 23:43 . drwxrws— 7 fred bar 4096 Apr 6 17:12 .. drwxrws— 2 fred bar 4096 Apr 6 17:11 07 drwxrws— 2 […]

如何在BASH中按创builddate对目录进行sorting?

我试图创build一个简单的脚本来列出在我的NAS机器上的一个目录中创build的16个最新的文件夹,以此来显示添加到我的collections集中的最新电影。 我现在使用的脚本是: #!/bin/bash rm -f /volume1/new-movies/* IFS=$'\x0A' fresh=$(ls -1ct /volume1/movies | head -16) for folder in $fresh do file=$(find "/volume1/movies/$folder" -maxdepth 1 -type f) movie=$(basename "$file") ln -s "$file" "/volume1/new-movies/$movie" done ls -1 /volume1/new-movies 这是好的(电影文件夹将只包含文件夹)。 我的问题是这是sorting的文件/文件夹修改时间,而不是创build时间。 文件系统是ext4 ,应该支持一个birth time但我没有运气访问它。 scott@pandora scripts $ stat /volume1/movies/example/ File: '/volume1/movies/example/' Size: 4096 Blocks: 8 IO Block: 4096 directory Device: […]

用sedreplace多行variables

我必须创build一个脚本来replaceApache的httpd.conf文件中的几行。 我有2个问题。 首先,我如何将多行保存到一个variables中? 我试过了,但没有奏效 replace="#ErrorLog "logs/error_log" '\n' ErrorLog "|<apache_location>/bin/rotatelogs <apache_location>/logs/error.%Y.%m.%d.log 86400" '\n'没有工作来添加换行符。 然后我的想法是使用sed (1)像这样: sed -i "s#ErrorLog "logs/error_log"#$replace#g" $apache_httpd 我不知道这是否会起作用。 我能够用几行创buildvariables: VAR="#ErrorLog \"logs/error_log\"" VAR="$VAR"$'\n'"ErrorLog \"|<apache_location>/bin/rotatelogs <apache_location>/logs/error.%Y.%m.%d.log 86400\"" replace="ErrorLog \"logs/error_log\"" 现在问题出现在sed中,我不得不使用不同的分隔符( http://backreference.org/2010/02/20/using-different-delimiters-in-sed/ )。 但是它一直在失败。 sed -i "s;$replace;$VAR;g" /root/daniel/scripts/test3/httpd.conf sed:-eexpression式#1,字符54:未终止的's'命令

是一个叫某处的脚本

在我的一台Linux服务器上,我有一个执行一些控制的脚本。 有没有find这个脚本被调用的方法? 这可以在另一个脚本,cobol程序,crontab,…打开他们每一个将需要很长的时间。

在Linux上安装cx_Oracle的问题 – 只从Site-Packages目录导入

我已经安装了cx_Oracle来连接Python和Oracle进行编程; 但是,我只能将cx_Oracle导入python,如果我在cx_Oracle所在的目录中。 我怎样才能在全球导入cx_Oracle? 以下是显示问题的代码。 谢谢你的帮助。 Python无法导入cx_Oracle user@T420 ~ $ python Python 2.7.3 (default, Sep 26 2012, 21:51:14) [GCC 4.7.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import cx_Oracle Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named cx_Oracle Python可以从它所在的目录中导入cx_Oracle user@T420 /usr/lib/python2.7/site-packages $ ls cx_Oracle-5.1.2-py2.7.egg-info […]

非常复杂的带有大量引号的shellstring,如何处理escape

我有一个string: str='sudo nohup bash -c "kill -9 `ps -ef|grep "udp_receiver"|grep -v "grep"|awk '{print $2}'` > /nohup.out 2>&1 &"' 有许多引号和上面的variables是不正确的 我试过了 str='sudo nohup bash -c "kill -9 `ps -ef|grep \"tcp\"|grep -v \"grep\"|awk \'{print $2}\'` > /nohup.out 2>&1 &"' 仍然不正确如何修改它使其正确? 谢谢