Articles of bash

为什么在使用telnet vs ssh时,AIX上的bash调用有所不同

我正在使用AIX 5.3服务器,其中设置了一个.bashrc文件来回显“执行bashrc”。 当我使用sshlogin到服务器并运行: bash -c ls 我得到: Executing bashrc . .. etc…. 但是,当我用同一个用户logintelnet并运行相同的命令,我得到: . .. etc…. 显然,在telnet的情况下,没有调用.bashrc。 就在我可以告诉这是正确的行为,因为在这两种情况下shell都是非交互式的(用-c调用它)。 但是,ssh情况似乎是以交互方式调用shell。 它似乎没有调用.profile,所以它不是创build一个loginshell。 在这两种情况下,我看不出有什么明显的不同。 什么可能导致bash行为的差异?

质量mv使用find?

/ home /目录中有一堆filename.gif。 我希望所有的filename.gif被/home/shared/filename_default.gif取代。 我试过类似的东西 find /home/ -name "filename.gif" | xargs <cmd> 但我不知道我想要什么。 一定不会问这里或计算器 编辑:这工作完全像我解释说,除了我不仅想从filename_default的数据取代filename.gif,而且为filename.gif被重命名为filename_default.gif。 所以我做了mv {} filename_default.gif ,并将其目录中的所有文件mv {} filename_default.gif到名为filename_default.gif …的lol下的/ root /下。 无论如何,引用目录中的变化的variables.. 例如find / home / -name“filename.gif”实际上是这样的… /home/brian/dir/1/2/3/filename.gif /home/beth/dir/1/2/3/filename.gif /home/andrea/dir/1/2/3/filename.gif 我怎么能参考brian,beth,andrea …就像通配符*。 cp /home/shared/filename_default.gif /home/*/dir/1/2/3/filename_default.gif

ssh publikkey身份validationgit内的bash脚本?

我目前在我的Linux服务器上运行了一个bash脚本,每周一次通过我的仓库,执行一些任务,并远程备份它们。 今天我开始备份一些远程存储库。 我的计划是能够在备份bash脚本内部运行一个类似于(cd $ dir && git pull origin master 2 >> $ LOGFILE)的for循环。 我似乎遇到的问题是,我试图从github中取出一些东西,这需要我的私钥文件在继续之前解锁。 有什么办法可以事先提供这个密码,这样我就不会得到密码的交互提示吗?

从查找中执行多个命令

大多数人都熟悉使用find在一些文件上运行相同的命令,例如: find -type f | xargs command 要么 find -type f -exec command {} \; 我的问题是是否可以从find中运行多个命令: find [path] [expression] -exec command1 {} -exec command2 {} \; 所以输出看起来像 command1: file1 command2: file1 command1: file2 command2: file2 command1: file3 command2: file3 command1: file4 command2: file4 很明显,我可以为此写一个简单的shell脚本包装器,但是是否可以通过命令行(可能使用awk , tee等)完成这些操作?

Apache Logrotate Bash问题

…所以我试图每小时轮stream在亚马逊云自动缩放服务器实例的日志。 我创build了/etc/cron.hourly/logrotate来阅读: #!/bin/bash test -x /usr/sbin/logrotate || exit 0 /usr/sbin/logrotate -f /etc/logrotate.conf 我已经修改/etc/logrotate.d/apache2来读取: /var/log/apache2/*.log { missingok rotate 100 create 640 root adm sharedscripts postrotate neoBucket="widget-chapp/dev/log/"; neoService="apache"; neoDate=$(date +\%Y\%m\%d\%H); echo "hostname: $HOSTNAME"; neoHost=`echo "$HOSTNAME" | sed "s/-//g"`; # prepend neoService and append YYYYMMDDHH for f in *.log.1; do mv ./$f "$neoHost-$neoService-${f%1}$neoDate"; done # gracefully restart the […]

CD在bash脚本

我在Windows环境下工作,但更喜欢在cygwin中使用bash作为我的shell。 要cd到一个冗长的path,我在Windows窗体中给我input: cd $(cygpath -u 'Z:\Some\long\windows\path') ..从剪贴板中取出窗口path。 由于我很懒,所以我试图做一个快捷方式: #!/usr/bin/env bash if [ -z "$1" ]; then exit 0 else TGT=$(cygpath -u $1) cd $TGT fi exit 0 ..然后意识到,CD发生在我的脚本运行在shell中,而不是我从它所调用的,所以没有预期的效果。 我该如何做这项工作?

用于一个目录(包括其子目录)的总磁盘空间

在Linux环境中。 我怎样才能找出一个文件夹的总空间。 它希望这个总数包括所有的子目录。 我不想每个子目录的大小转储。 只是一个目录所占的总大小,它包含在c中的所有子目录的大小

与几场比赛sed

两个“sed行”只有以下的“\ n”不同。 我怎样才能得到这个输出[在</pre>之前没有新行]? [ http://pastebin.com/raw.php?i=ED34jvtF ]: . . something3 </pre> something4 . . $ echo -e 'something1\nsomething2\nsomething3\n\n</pre>\nsomething4\nsomething5'; echo "######################################"; echo -e 'something1\nsomething2\nsomething3\n\n</pre>\nsomething4\nsomething5' | sed -e N -e N -e "s#\n</pre>#</pre>#g" -e P -e D something1 something2 something3 </pre> something4 something5 ###################################### something1 something2 something3</pre> something4 something5 $ $ echo -e 'something1\nsomething2\nsomething3\n\n</pre>\nsomething4\nsomething5' | sed -e N […]

使用diff / patch进行远程编辑?

我在vim中完成了大部分工作。 我更喜欢使用vim在本地编辑文件,而不是在服务器上运行vim并运行vim,原因很多,其中一个最重要的就是在慢速连接上的UI响应。 我知道我可以使用vim和scp编辑远程文件,而且我也有一个使用sshfs的设置,使我可以非常简单地cd到一个挂载点,然后vimfind一些文件。 但是,每次我保存文件,它都会把整个文件写到远程服务器上, 这真的减慢了我的工作stream程。 我真正想要做的是有这样的设置: 当使用本地vim打开一个远程文件时,拉取文件的内容和文件的散列 当保存文件时,检查远程哈希是否没有改变,如果没有改变,则上传一个diff并用新的修改修补远程文件。 最好通过一个持久的ssh连接来完成这个任务,这样每次都不会丢失时间。 这将更快,带宽效率更高,并具有相同的function。 我通常使用git或svn来实现类似的结果,但是当我没有使用这种SCM系统的奢侈品时,我真的希望有这种最小的function。 我的问题是: 1.有谁知道任何现有的脚本或程序会为我做一些或全部的这些? 2.任何人都在乎鞭打一些屁股,将做的伎俩? 我知道应该可以用这些几个做…

需要使用正则expression式/ grep awk / sed / perl模式的帮助

从grep输出示例文件 file1:my $dbh = DBI->connect("dbi:mysql:$database_name", $DB_USER, $DB_PASSWD) file2:($dbc,$rc) = mysql_connect($mysql_host,$mysql_user,$mysql_password); awk模式应该从第1行获取值databasename,DB_USER和DB_PASSWD,并且从第2行获得mysql_host,mysql_user和mysql_password ,即all variables inside the function. 然后它应该在文件之前search该variables的声明:(分号) 例如:file1中的databasename可能是 $ databasename =“dbweb”; 例如:file2中的mysql_user可能是 $ mysql_user =“root”; 结果:它应该显示所有6个variables的variables声明以及文件名 file2:$mysql_host = "db1"; file2:$mysql_user = "root"; file1:$DB_USER = 'user';