Articles of bash

bash脚本使用scp来传输search的文件

我根本没有太多的bash经验。 下面的脚本在我没有使用find命令的时候工作,直接从文件中findscp。 但是我试图find并转移一个附有今天d / m / y的文件,并在find它之后才转移这个文件。 目前给出的错误“文件未find”也不知道如何在这种情况下使用variables,因为我是一个PHP编码器。 谢谢 #!/usr/bin/expect -f FILENAME = appendname_'.date +%d%m%Y; spawn bash -c "scp 'find /www/reports/archives . -name $FILENAME.txt' ftpdomain.com:/" expect "password:" send "pwaord\r" expect "*\r" expect "ok"

在bash命令中调用一个自定义函数

我有以下bash脚本: #!/bin/bash find . -maxdepth 1 -mmin +1 -type f -name "240*.ts" | xargs -L 1 bash -c 'mv "${1}" "$(get_crtime${1} | awk '{print $5}').ts"' \; 这个想法是find比一个特定模式匹配一​​分钟以上的文件(在我的例子中,以'240'开始的文件),并将它们从原始名称(240-1458910816045.ts)重命名为所需的格式(15: 00:16.ts)。 在脚本里面,我使用了get_crtime命令,它是/etc/bash.bashrc中包含的自定义函数,具有以下实现: get_crtime() { for target in "${@}"; do inode=$(stat -c '%i' "${target}") fs=$(df "${@}" | awk '{a=$1}END{print a}') crtime=$(sudo debugfs -R 'stat <'"${inode}"'>' "${fs}" 2>/dev/null | grep […]

Pythonvariables和subprocess.call

首先我想说,我是这个网站的新手,任何批评都是值得赞赏的。 我想修改一个Python脚本来读取一个rfid键,然后pipevariablesUID到一个脚本(bash),将validation它等到目前为止,我设法隔离的UID,我可以打印它在Python中,但我可以不要把它放在bash脚本中。 print "" + str(uid[0]) + "" + str(uid[1]) + ""+ str(uid[2]) + "" + str(uid[3]) 这里是我用来打印uid的string,我怎样才能把它传给bash脚本? 谢谢!

奇怪的bash脚本exception – 什么是anaconda-ks?

我试图写一个简单的bash脚本打印一堆随机字符: for i in {1..100000} do echo -n $(printf \\$(printf '%03o' $(( ( RANDOM % 220 ) + 35 )))) done 这样做没问题,但是,由于一些神秘的原因,一堆不随机的angular色出现: DU▒▒2D@I▒▒▒lb;▒.lO▒c▒˕#M〜<▒ڃ▒wp▒▒]▒2▒US 栃y▒)▒▒|▒ߎD▒▒l▒8▒T▒℘6▒wh;▒▒7▒h▒▒ωӕ▒$▒йa▒▒▒▒깅-▒+▒1▒0ıC▒▒▒j1▒▒Ph=fm;▒▒6;;▒▒▒▒kL(%<▒▒o▒anaconda-ks.cfg Desktop Documents Downloads install.log install.log.syslog Music Pictures Public Templates timesynch.err timesynch.log timesynch.sh Videos▒▒5y#▒▒ΖsbA1vi_▒▒b▒▒ظ▒>▒▒k۹▒Ysɂ▒▒▒(▒▒▒G▒Դ▒▒cՋ▒=▒I▒ڰ벫▒l▒P▒▒KԽ▒▒lk▒anaconda-ks.cfg Desktop Documents Downloads install.log install.log.syslog Music Pictures Public Templates timesynch.err timesynch.log timesynch.sh Videos▒-▒ÇR▒▒▒C▒▒+w▒M▒{@س▒▒Dž▒j'q▒n'▒Tp▒▒lh▒▒.▒▒▒▒▒▒▒▒c▒N▒ܳ▒j▒▒▒▒▒▒s@=▒j▒$h▒U▒▒&▒3▒/▒+W▒▒۠^▒▒N)▒oz▒▒▒▒1}΃▒▒▒B4▒▒▒/U▒▒▒▒~▒:▒▒▒▒▒'▒▒.|▒pߺ▒▒+▒c▒▒▒Iɔ▒▒▒▒▒ϞTm&▒▒<Bo&▒т▒▒VH▒2m▒▒;▒O'▒▒؜▒⊞q▒Ǧ▒▒▒O▒▒▒▒틈▒▒▒$ྕ▒▒ф▒ַ▒▒n<6▒▒▒N@f▒▒▒)[▒▒y1'▒n▒UзkB'▒▒]z&u8▒▒D▒▒7_▒▒|\▒▒eEy▒2ʉؕF▒▒zٹ▒)X▒▒▒?▒▒h▒▒l▒▒0▒▒L▒R:▒▒▒X▒▒▒wz▒▒6▒/▒oTڣ3d\n▒7iX 栃y▒)▒▒|▒ߎD▒▒l▒8▒T▒℘6▒wh;▒▒7▒h▒▒ωӕ▒$▒йa▒▒▒▒깅-▒+▒1▒0ıC▒▒▒j1▒▒Ph=fm;▒▒6;;▒▒▒▒kL(%<▒▒o▒anaconda-ks.cfg Desktop Documents Downloads install.log […]

如何通过shell脚本知道目标计算机使用的操作系统的IP?

( 不使用NMAP )我使用TTL值来确定用户inputIP时在目标计算机上使用的操作系统。 实际上,我必须在Case语句中硬编码TTL值。 所以我的问题是: TTL是我们了解正在使用的操作系统的唯一途径吗? 如果TTL不是唯一的方法,那么你能build议/解释在input的IP的基础上可以使用哪些其他方法来检查在目标计算机上使用的操作系统吗? 在networking上searchTTL表时,我发现许多操作系统具有相同的TTL值。 那么有什么办法指出确切的操作系统? 有什么办法可以确定有关操作系统的更多信息,例如是32位还是64位? 如果是的话,哪个领域和什么基础? 以下是我使用TTL值确定正在使用的操作系统的示例代码: #!/bin/bash echo "Enter IP to find it's OS" read ip a=`ping -c 1 $ip|grep -w "ttl" | cut -c 41-47 | tr -d ' '` echo $a case "$a" in ttl=64) echo "Linux Based";; *) echo "other";; esac

Shell脚本在成功执行后离开进程

我写了一个shell脚本,它使用nohup调用其他schell脚本。 脚本成功完成后,我仍然看到Linux进程正在运行我写的自定义脚本。 startAllComponents.sh的内容 start_Server() { SERVER_HOME=${1} NOHUP_LOG_FILE=${2} logmsg "Starting the server" /usr/bin/nohup `${SERVER_HOME}/bin/server.sh >> ${NOHUP_LOG_FILE} 2>&1 ` & sleep 5 PID=`ps -ef|grep ${SERVER_HOME}/jvm |grep -v grep| awk '{print $2}'` if [ "${PID}" = "" ] then logmsg "Couldn't get the PID after starting the server" else logmsg "****** Server started with PID: ${PID} ****** " […]

CMake:如何使用add_custom_command(…)中的条件

我想使用Linux,如果CMakeLists.txt中的条件由add_custom_command(…),我需要运行这些条件,并在makefile做一些判断。 喜欢这个: cmake_minimum_required(VERSION 2.8) add_custom_target(temp_target ALL) add_custom_command(TARGET temp_target PRE_BUILD COMMAND if ["a" != "b"]; then echo 1; fi; VERBATIM ) 我应该怎么做,如果我想使用 if ["a" != "b"]; then echo 1; fi; 什么时候make makefile? 非常感谢您的帮助!

Linux BASH,如何从另一个文件中添加两行

在Ubuntu上使用bash。 我有两个文件。 文件1包含一系列primefaces及其在空间中的位置,如下所示: Si 1 14 24.094049488113697 22.249517320000000 5.4091803780000000 Si 2 14 -21.980209241886303 23.466150130000000 -6.4407518510000000 Si 3 14 -9.8193586518863060 -13.586795180000000 -14.608877780000000 这个文件继续下去,直到所有的primefaces被描述。 文件2非常相似,但包含更多信息。 除名称和位置外,还包含有关速度和力量的信息。 它看起来像这样: Si 1 22.31756370 22.24951732 5.409180378 29.0968650481 -12.2276780157 -7.08186598428 30498.6028163 -9406.07172249 -27393.4141429 Si 2 -23.75669503 23.46615013 -6.440751851 -28.7812217378 31.2316292200 -34.6050775946 40272.8675096 -40472.1160399 -1103.73416448 Si 3 -11.59584444 -13.58679518 -14.60887778 13.5323597131 42.5618815724 8.79048959706 […]

Bash – 在文件之前列出目录名称的所有子目录中的程序

我不需要在一行中做这个,但是到目前为止我只有一行。 find . -perm -111 +type f | sort -r 我想要做的是写一个bash脚本,将显示当前目录中的可执行文件(z到a)的所有文件的列表。 我希望脚本为所有子目录执行相同的操作。 我遇到的困难是在该目录/子目录中的可执行文件列表之前显示该子目录的名称。 所以,澄清,理想的输出可能是这样的: program1 program2 SubDir1 program3 SubDirSubDir2 program4 SubDir2 program5 我现在所拥有的(上面的代码)是这样做的。 它没有删除/path,它没有列出目录改变时新目录的名称。 ./exfile ./test/exfile1 ./test1/program2 ./test1/program ./first 希望这是明确的。

用sed添加一个内核参数到grub

我正在写一个bash脚本,以非交互方式在Linux系统上启用hibernate模式。 为此,我需要在该行的引号内插入一个包含斜线的shellvariables。 b编辑文件的相关部分如下所示: GRUB_DEFAULT=0 GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="Manjaro" GRUB_CMDLINE_LINUX_DEFAULT="quiet" GRUB_CMDLINE_LINUX="" 我需要将其更改为: GRUB_DEFAULT=0 GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="Manjaro" GRUB_CMDLINE_LINUX_DEFAULT="quiet resume=/dev/disk/by-partuuid/c5a552c2-fe8f-423a-9037-c35bf090d9c3" GRUB_CMDLINE_LINUX="" 增加的参数由一个shellvariables提供。 我试过这个: sed -i '\*^GRUB_CMDLINE_LINUX_DEFAULT* s*"$* '"$(grub_resume_boot_option)"'"*' /etc/default/grub 我正在瞄准的逻辑是:“寻找一个以模式”GRUB_CMDLINE_LINUX_DEFAULT“开始的行,并用给定的模式replace最后的”。 使用*作为分隔符来保留扩展variables中的斜杠。 但是,如果行尾有空格,则该命令将失败。 是否有任何方法可以使它不占用线路末尾的空格? 另外,如果有更简单或可读的解决scheme,我会非常感兴趣。