Questions tagged «bash»

与其他Bourne / POSIX shell相对,GNU的Bourne Again SHell特有的问题。对于一般关于Unix shell的问题,请改用/ shell标记。

6
从文件中删除行,具体取决于在另一个文件中找到的行
文件file1.txt包含以下行: /api/purchase/<hash>/index.html 例如: /api/purchase/12ab09f46/index.html 文件file2.csv包含以下行: <hash>,timestamp,ip_address 例如: 12ab09f46,20150812235200,22.231.113.64 a77b3ff22,20150812235959,194.66.82.11 我想过滤file2.csv,以删除在file1.txt中也存在哈希值的所有行。就是说: cat file1.txt | extract <hash> | sed '/<hash>/d' file2.csv 或类似的东西。 它应该很简单,但是我似乎无法使其工作。 任何人都可以为该任务提供有效的管道吗?

3
在Bash中从字符串转到“单词”数组
我需要从字符串转到数组,其中每个条目都是该字符串上的每个单词。例如,从以下开始: VotePedro="Vote for Pedro" 我需要数组: Vote For Pedro 然后,我应该可以将其迭代为: for i in "${votePedroArray[@]}" do ## Do something done

4
使用嵌套循环退出shell脚本
我有一个带有嵌套循环的shell脚本,只是发现“退出”并没有真正退出脚本,而只是退出了当前循环。还有另一种方法可以在某些错误情况下完全退出脚本? 我不想使用“ set -e”,因为存在可接受的错误,并且需要进行大量重写。 现在,我正在使用kill手动终止进程,但是似乎应该有更好的方法来执行此操作。
11 bash  shell  scripting  exit 

5
bash:将变量的第一行分配给变量
我有一个多行变量,我只想要该变量的第一行。以下脚本演示了该问题: #!/bin/bash STRINGTEST="Onlygetthefirstline butnotthesecond orthethird" echo " Take the first line and send to standard output:" echo ${STRINGTEST%%$'\n'*} # Output is as follows: # Onlygetthefirstline echo " Set the value of the variable to the first line of the variable:" STRINGTEST=${STRINGTEST%%$'\n'*} echo " Send the modified variable to standard output:" …
11 bash 

2
如何从历史记录中的最后一个命令访问第二个参数?
我开始学习一些正则表达式,因此我反复使用此命令: grep pattern /usr/share/dict/american-english 只有带有模式的部分会发生变化,因此我不得不一次又一次写出长表达式“ / usr / share / dict / american-english ”。 有人说,可以通过键入隐含的字符组合而不是完整的表达式从命令历史中扩展命令的自变量。你能告诉我那些神秘的字符组合吗?



2
括号在bash shell本身有效,但在bash脚本中无效
我可以从命令行提示符运行以下命令: cp -r folder/!(exclude-me) ./ 以递归方式将folder 除子目录之外的所有内容复制exclude-me到当前目录中。这完全符合预期。但是,我需要在我编写的bash脚本中使用它: if [ -d "folder" ]; then cp -r folder/!(exclude-me) ./ rm -rf folder fi 但是当我运行脚本时: bash my-script.sh 我得到这个: my-script.sh: line 30: syntax error near unexpected token `(' my-script.sh: line 30: ` cp -r folder/!(exclude-me) ./' 而且我不知道为什么它可以在命令提示符下工作,但是在bash脚本中完全相同的行不起作用。

4
旧版Debian版本和Bash Shellshock
我们正在运行Debian Etch,Lenny和Squeeze,因为该商店从未进行过升级。我们有150多个运行各种Debian版本的系统。鉴于本周的“外壳冲击”,我认为我需要升级bash。我不了解Debian,所以我很担心。 我可以在我的apt-get install bash所有Debian系统上执行并获得正确的Bash软件包,而我的存储库却指向一个Squeeze条目。如果没有,我还有什么其他行动方针?

4
如何判断当前正在执行的bash脚本是否已通过-x调用进行调试?
我有一个脚本launch.sh,该脚本可以另一个用户身份执行,以便使用正确的所有者创建文件。我想将-x传递给此调用(如果它最初传递给脚本) if [ `whoami` == "deployuser" ]; then ... bunch of commands that need files to be created as deployuser else echo "Respawning myself as the deployment user... #Inception" echo "Called with: <$BASH_ARGV>, <$BASH_EXECUTION_STRING>, <$->" sudo -u deployuser -H bash $0 "$@" # How to pass -x here if it …
11 bash  debugging 

6
如何输出2个文件之间的差异?
我的文件包括以下内容;大致: username:username:username:username:username 上面的行继续到大约600个字符。 我使用awk命令是为了将其用作从命令行发送的API / HTTP请求中的参数。 我正在使用脚本获取“跟随”我的用户帐户列表,每隔24小时左右,将硬盘上的原始列表与新输出的用户名列表进行比较(并回显不再关注的用户)我。我将不得不使用bash ..测试每个用户名将我的逻辑封装到一个循环中。 我当前的脚本: user=$(awk -F: '{ print $1 }' FILE) # Grab $User to use as an argument. following=$(exec CURRENT_FOLLOWERS) # Outputs the new file echo "X amount of users are following you on 78B066B87AF16A412556458AC85EFEF66155" SAVE CURRENT FOLLOWERS TO NEW A FILE. if [[ …

3
一次替换多个字符串
我正在寻找一种使用通用Unix工具(bash,sed,awk或perl)用具体值替换模板文件中占位符字符串的方法。重要的是,一次更换即可完成更换,也就是说,对于另一次更换,不得考虑已经扫描/更换的物品。例如,这两次尝试均失败: echo "AB" | awk '{gsub("A","B");gsub("B","A");print}' >> AA echo "AB" | sed 's/A/B/g;s/B/A/g' >> AA 在这种情况下,正确的结果当然是BA。 通常,该解决方案应等效于从左至右扫描输入,以与给定替换字符串之一进行最长匹​​配,并且对于每个匹配,执行替换并从输入中的该点继续进行操作(无已读取的输入,也不应考虑执行替换操作以进行匹配)。实际上,细节并不重要,只是替换的结果从不考虑全部或部分替换。 注意我只是在寻找正确的通用解决方案。请不要提出某些输入(输入文件,搜索和替换对)失败的解决方案,但是看起来不太可能。
11 bash  sed  awk  string  replace 

2
评估$ BASH_COMMAND是否安全?
我正在研究一个shell脚本,该脚本从变量构造一个复杂的命令,例如像这样(使用我从Bash FAQ中学到的技术): #!/bin/bash SOME_ARG="abc" ANOTHER_ARG="def" some_complex_command \ ${SOME_ARG:+--do-something "$SOME_ARG"} \ ${ANOTHER_ARG:+--with "$ANOTHER_ARG"} 该脚本动态添加的参数--do-something "$SOME_ARG",并--with "$ANOTHER_ARG"以some_complex_command如果这些变量的定义。到目前为止,一切正常。 但是现在我还希望能够在运行命令时(例如,在调试模式下运行脚本时)打印或记录命令。因此,当我的脚本运行时some_complex_command --do-something abc --with def,我也希望将此命令包含在变量中,以便例如将其记录到syslog中。 Bash FAQ演示了一种用于此目的的DEBUG陷阱和$BASH_COMMAND变量(例如用于调试目的)的技术。我已经尝试使用以下代码: #!/bin/bash ARG="test string" trap 'COMMAND="$BASH_COMMAND"; trap - DEBUG' DEBUG echo "$ARG" echo "Command was: ${COMMAND}" 这可行,但是不会在命令中扩展变量: host ~ # ./test.sh test string Command was: echo "$ARG" 我想我必须使用eval扩大echo "$ARG"到echo …
11 bash 


2
如何记录我的自定义bash函数和别名?
问题: 我有多个bash函数和别名。我不记得所有的人把我的头顶部,所以我通常最终会打开我.bash_functions和.bash_aliases档案找到我所需要的。 问题: 如何列出bash提示中的可用功能/别名? 我可以使用注释(如PHPDoc之类的)来记录bash函数/别名吗? 我只是想要一种简单/不错的方式来输出可用的内容而不必打开文件。运行命令并吐出我的函数/别名的动态列表会很酷(使用示例会是一个加号)。:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.