你好,我有以下信息:
bash_script parm1 a b c d ..n
我想迭代并打印命令行中从a开始的所有值,而不是从parm1开始这应该可以做到:
#ignore first parm1
shift
# iterate
while test ${#} -gt 0
do
echo $1
shift
done
另一种风格,稍微短一点,保留参数列表
shift
for i in "$@"
do
echo $i
done
可以在bash中“切片”数组;您可以使用
for
如果我把它放在Bash脚本的顶部,Control+C就不起作用了
exit-function() {
echo "Hey hey!"
}
trap exit-function INT
但如果我把它放在后面几行,那么控制+C就被困住了
更新:
如果它放在源“$HOME/.rvm/scripts/rvm”之后,则它可以工作。
因此,如果您源于另一个文件,以前定义的trap INT将不起作用?rvm脚本源的其中一个脚本将设置一个trap,它将替换您先前设置的陷阱。通过在rvm脚本之后设置
标签: Bash
readlinebash-completion
我正在运行Ubuntu11.04,当我试图在bash中使用以变量开头的路径上的制表符补全时,我看到了一些奇怪的行为。如果我有TOP=/scratch,并且我尝试使用tab complete:
cd$TOP/foo
改为:
cd\$TOP/foo
我希望它能够完成,而不是:
cd$TOP/foobar
或
cd/scratch/foobar
但我会接受它只是不改变路线,并要求我取消逃脱美元
有人知道我应该在bash/readline中的什么地方修复此问题吗?找到错误报告,请注册(如果尚未注册)并将
我正在尝试运行一个排列测试,它涉及到将一千个非常大的预排序文件合并成一个巨型排序文件
当前运行的一些文件甚至比我通常合并的文件还要大(每个68M到106M)
我没有足够的硬盘空间同时用于输入、临时中间产品和输出。有没有一种方法可以使用sort以破坏性方式合并所有这些文件
以下是我当前使用的命令:
sort -T /media/WD_Book/tmp --compress-program=gzip -g -k 6 -m *.rand.tab > /media/WD_Book/output/m
我最近在Scala中发现了sys.process包,并被它的强大功能逗乐了
但当我尝试将它与bash管道和backticks结合起来时,我就卡住了
这显然不起作用:
scala> "echo `date`" !!
res0: String = "
"`date`
"
我尝试使用bash可执行文件来获得所需的行为:
scala> "bash -e echo `date`" !!
/bin/echo: /bin/echo: cannot execute binary file
java
考虑使用bash完美运行的以下命令:
java -classpath bin:lib/* FunctionalTests.TestRunner
类位于bin,JAR位于lib,main()位于bin/FunctionalTests/TestRunner:
.
├── bin
├── lib
│ ├── commons-collections-3.2.1.jar
│ ├── commons-httpclient-3.1.jar
│ ├── commons-io-2.1.jar
│
我当前的脚本执行以下操作:
它将整数作为命令行参数,从1到N开始,它检查数字是否可以被3、5或两者整除。它只需打印3的Uc、5的Bes和3,5的UcBes。如果命令行参数为空,它将执行相同的操作,但循环将转到1到20
我的错误是“第11、15和19行的参数太多”
代码如下:
#!/bin/bash
if [ ! -z $1 ]; then
for i in `seq 1 $1`
do
if [ [$i % 3] -eq 0 ]; then
这是工作代码:
nn=2
((nn += `
case "2" in
"1") printf 5 ;;
"2") printf 10 ;;
*) printf 20 ;;
esac
`))
echo $nn
我如何可以这样简化:
nn=2
((nn += `
case "2" in
"1") 5 ;;
"2") 10 ;;
*) 20 ;;
esac
`))
echo $nn
case "$1" in
1) m=5 ;;
2)
我有一个包含3个虚拟文件的文件夹:ab0、ab1和ab2
$ echo ab*
ab0 ab1 ab2
$ myvariable=ab*
$ echo $myvariable
ab0 ab1 ab2
$ echo 'ab*'
ab*
到现在为止,我想我明白了。但是:
$ myvariable='ab*'
$ echo $myvariable
ab0 ab1 ab2
我期待着ab*。这意味着有一个基本的我不明白
我一直在bash教程和手册中搜索单引号与双引号、扩展以及更多内容,但我还没有找
如何将第二列从正数改为负数,反之亦然
aa.txt
31OCT2013:00:00:00,220.10,"O","090500 13549951"
31OCT2013:00:00:00,-0.32,"I","090500 13549964"
31OCT2013:00:00:00,-220.10,"O","090500 13549951"
31OCT2013:00:00:00,+0.32,"I","090500 13549964"
答案应该是
aa.txt
31OCT2013:00:00:00
我有一个名为words.txt的文件,其中包含一个单词列表。我还有一个名为file.txt的文件,每行包含一个句子。我需要快速删除file.txt中包含words.txt中一行的任何行,但前提是在{和}之间找到匹配项
例如,file.txt:
Once upon a time there was a cat.
{The cat} lived in the forest.
The {cat really liked to} eat mice.
cat
mice
例如,words.txt:
On
我正在尝试将目录中的n个文件移动到子目录。为了清楚起见,假设我有一个名为1999的文件夹。
我在/1999下有364个文件,这些文件是每天的数据文件。我想将这些文件移动到名为weeks(1-52)的子文件夹中。在本例中,我想将第1-7个文件移动到名为“1”的文件夹中,然后将第8-14个文件移动到名为“2”的文件夹中,并将第358-364个文件移动到名为“52”的文件夹中。所以我需要一个7的循环:)。如何在bash或ksh中执行此操作?以下是一个伪代码:
Get timestamp of the
当我打开终端并键入“emacs”时,会打开一个新的emacs窗口。但在使用ssh登录到另一台主机后,键入“emacs”会在终端内创建一个emacs缓冲区
在使用ssh时,是否有任何方法可以指定希望在终端外部打开windows?也许在我的.bashrc中插入了什么
注意:我已经尝试使用“ssh-Y”而不是“ssh”。它不起作用
编辑:我不知道为什么它以前不工作,但现在“ssh-Y”和“ssh-X”都解决了我的问题。您需要的是导出X窗口
尝试:
如果Emacs未编译为使用窗口系统,您将无法执行此操作
sudo echo“sadfsadf”>/etc/apache2/mods available/dir.conf
我使用sudo运行命令,但它返回错误:“权限被拒绝:
为什么此命令不起作用?sudo xxx>文件不按预期工作。xxx以root用户身份执行,但文件写入()仍以当前用户身份“执行”
sudo-s,然后使用管道执行命令
如何使用-R或其他方式告诉less,不要在换行符(\n)之间重置颜色?下面是我看到的一个例子:
$ echo -e '\033[31mThis is red.\nStill red.\n\033[0mBack now.' >> coltest
$ cat coltest
This is red. #Colour is red
Still red. #Colour is red
Back now. #Colour is the terminal's foreground co
我想选择以“data*”开头的文件夹中的所有文件,并按日期选择最新的文件,以便所选文件的压缩zip文件不应超过50MB。如何在bash脚本中实现这一点
我可以迭代地将文件添加到zip文件夹并检查大小,但我必须确保首先添加最新的文件。使用ls-t选择最新的数据文件很简单。这将返回一个文件列表,这些文件按最近修改的内容排序,并且与字符串匹配。我会把这个列表放在一个.txt文件的某个地方
ls -t data* > lsResults.txt
至于拉链,那是反复试验。我不能告诉你一个文件在压缩
我有一个来自PuTTY会话的240MB日志文件。这被错误地记录为“SSH数据包和原始数据”格式,而不是“所有会话输出”。如果在文本编辑器中打开文件,则可以看到所需的数据(纯文本)
问题是从原始数据中提取这些数据
例如:
Incoming raw data at 2016-01-06 15:47:42
00000000 e8 fd c2 d2 88 a9 39 b9 2a 77 2a 7b 4a 60 fc 21 ......9.*w*{J`.!
00000010 1d f5 fc
以下代码:
#!/bin/bash
osascript -e \
'tell application "Google_Chrome" to tell tab 1 of window 1 \
set t to execute javascript "document.body.innerText" \
end tell' | grep ':'
产出结果:
line1:blah blah
line2:blah 123
line3:
line4:[456] blah
Line5:blah b
想法很简单,我希望能够从我的系统执行scp命令,并将文件移动到另一台计算机,反之亦然
我的案子有个小问题。为了连接到终端计算机,我必须首先ssh到主机b,然后ssh到主机c
长话短说,我必须先将所有文件复制到主机b,然后再复制到主机c
这是scematic:
my_computer -> host_b -> host_c
由于每次都要手动运行我的代码,我不得不这样做,这有点令人沮丧,所以我想我应该自己编写脚本来自动化这个过程
以下是我目前的代码:
#!/usr/bin/expect
我有一个bash命令,它生成一个文件列表,我需要修改文件名。
所以我想用这样的方法:
mycommand | awk {mv $1 altered$1}
问题是第二个$1应该被修改为一些正则表达式。
如何将sed应用于第二个参数
我试过使用$()和|,但不起作用
我也试过了
awk '{print $1 sed "s/[^A-Za-z0-9._-]/_/g" <<< $1}'
awk: cmd. line:1: Unexpected token
awk'{print$1 s
假设我有一个bash脚本,如下所示:
array=( 1 2 3 4 5 6 )
for each in "${array[@]}"
do
echo "$each"
command --arg1 $each
done
array=( 1 2 3 4 5 6 )
for each in "${array[@]}"
do
echo "$each"
lags=($(command --arg1 $each)
lngth_lags=${#lags[*]}
for (
我试图终止一个进程并启动同一个进程
当我在命令行上使用pkill终止进程并使用nsd启动服务时,它工作得很好。但当我在脚本中使用相同的命令时,会显示以下错误:
nsd[18652]:通知:nsd启动(nsd 4.1.15)
nsd[18652]:错误:无法绑定udp套接字:地址已在使用中
nsd[18652]:错误:服务器初始化失败,无法启动nsd
开始
错误:连接(127.0.0)。1@8952):连接被拒绝
script.sh包含
pkill nsd
nsd
nsd-control re
所以我试图解决我面临的一个解析问题
我有一个日志文件,它在每行的开头都包含伪随机字符串。它们可以是任何东西,但长度始终相同,这是我希望保留的第一个数据集(例如start-of-log-001-),由19个字符组成,包括空格
start-of-log-001 - bacon bacon email1@email.com bacon metadata123 bacon 123 bacon
start-of-log-002 - bacon bacon metadata123 bacon email2@
我试图创建一个bash脚本,在ubuntu16.04环境中的gui中单击打开一段时间后运行。关于如何着手做这件事有什么建议吗
正在处理学校项目以创建勒索软件。尝试在单击文件后获取要执行的代码。打开是什么意思?是否只想设置脚本的执行权限?我正在处理学校项目以创建勒索软件。试图找出打开时要执行的代码。打开文件时?更改权限:chmod+x使其成为“可执行”
如中所述,检查bash中是否设置了变量的“正确”方法如下所示:
if [ -z ${var+x} ]; then
echo "var is unset"
else
echo "var is set to '$var'"
fi
我感兴趣的是如何将其提取到一个可以为不同变量重用的函数中
到目前为止,我能做的最好的事情是:
is_set() {
local test_start='[ ! -z ${'
local test_end='+x} ]'
local tester
考虑下面的配置文件,它有两个alt\u name实例。在这里,我想删除第二次出现模式alt\u names的行
.
.
[ server ]
subjectAltName = @alt_names
.
.
[ alt_names ]
我尝试了sed命令,但它删除了模式出现的所有行。我使用下面的命令这样做
#sed '/alt_names/{2,$d}' inputfile
下面将删除包含alt\u名称的第二行。计数器c将随着模式匹配的每一行而增加
awk '/alt_names/{c++;
是否可以这样做:
start=1
end=10
echo {$start..$end}
# Ouput: {1..10}
# Expected: 1 2 3 ... 10 (echo {1..10})
您必须使用eval:
eval echo {$start..$end}
你应该考虑使用 SEQ(1)< /代码>。您还可以使用eval:
eval echo {$start..$end}
下面是seq
seq -s' ' $start $end
我通常只是这样做:
echo `seq $s
如何在bash中抓住整个2个单词?我已经尝试过,我所能做的就是使用echo$a tr-s'| cut-d,-f3获取两个单词,但每个单词都会放在自己的行中,如:-
row1 row2 row3
Hello, World, Hello World
World, Hello, World Hello
使用带有自定义字段分隔符的awk作为空格或逗号:
Hello
World
World
Hello
这是一个.csv文件,为什么要使用echo$a?提供清晰
我正在编写一个bash脚本来自动处理一些文件,其中一个主题是使用iconv对源文件重新编码(如果它们不符合我的喜好)。为此,我使用:
enc=$(file -b --mime-encoding "$file") # get the encoding
if [ "$enc" = "iso-8859-1" ] || [ "$enc" = "us-ascii" ] # no need to encode these
then
如何自定义bash autocomplete,以便只为一个脚本选项(-seq)列出另一个目录中的文件,为其他脚本选项(-speed,-define)列出默认的autocomplete是可以的。这就是我所拥有的
export files=`ls /home/tests/`
echo $files #debug
_xtest () { .
local cur
COMPREPLY=() cur=${COMP_WORDS
我正在尝试使用awk解析如下所示的文本文件:
001 data John Smith address "London" | occupation "Driver" | exercise_level "Medium"
002 data Rob Edward address "Cardiff" | occupation "Physiotherapist" | exercise_level "High"
003 data Dara Pronk address "
目录结构如下所示
home
--dir1_foo
----subdirectory.....
--dir2_foo
--dir3_foo
--dir4_bar
--dir5_bar
我试图先使用'find'命令来获取包含特定字符串的目录(在本例中为'foo'),然后再次使用'find'命令来检索一些与条件匹配的目录
所以,我首先尝试了
#!/bin/bash
for dir in `find ./ -type d -name "*foo*" `;
do
for subdir in `f
我制作了一个简单的bash脚本,可以从url下载图片。但是,这不起作用,我一直收到错误bash命令subsitution:在输入中忽略空字节
如何修复此问题?wget-O-以二进制形式打印图片。然后您的脚本尝试执行此操作,因为您将其放入了$(),这是错误消息的来源
您需要做的是将从wget获得的图片的二进制流传递给一个可以解释它的程序。例如,您可以使用feh(1)
wget-qO-http://apache.org/images/asf_logo.gif |feh-
[1] 我正在使用的$url
虽然可以将shell命令的输出分配给如下变量:
list=$(ls -la)
似乎我无法将命令组的输出分配给变量。这似乎不起作用:
output=${ echo "Peter"; echo "Pan"; }
但是:通过管道传输命令组[1]的输出是可能的:
{
echo "To: $MAILTO"
echo "From: $FROM"
echo "Subject: $SUBJ"
echo
echo "Please check $HOSTNAME"
} | ssmtp $MAILTO
我正在尝试测试一个日期…如果它在这两个时间框架之间,我想打印它们。。。
但我有错误……这是我的脚本
today_time=$(date +%H:%M:%S --date '-1 sec')
today_dow=$(date +"%u")
today_less=$(date +%H:%M:%S --date '-1 min')
today_more=$(date +%H:%M:%S --date '+1 min')
echo $today_less
echo $today_time
echo $
我正在编写一个脚本,该脚本将删除如下注释:
/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */
/* Document
========================================================================== */
/**
* 1. Correct the line height in all browsers.
* 2.
这么简单的任务我有点麻烦
请在下面查找相关代码:
loewdin_fuk=$(echo $line_fukui|awk '{print $4}')
nbo_fuk=$(echo $line_fukui|awk '{print $5}')
echo "loewdin_fuk $loewdin_fuk nbo_fuk $nbo_fuk"
aver_fuk=$(($loewdin_fuk + $nbo_fuk))
\#aver_fuk=$(echo "scale=4; 0.5*($loe
我有以下资料:
directories="directory_1 directory_2"
for k in ${directories}; do
echo "${k}"
done;
问题是,如果我添加了一个名称中有空格的目录,例如目录3,这将失败,因为它被视为两个字符串。使用数组:
A=(
foo
"bar a"
blub
)
for k in "${A[@]}"; do
echo "$k"
done
印刷品:
foo
bar a
blub
福
酒吧
布鲁布
我想用.hml扩展名将所有.txt扩展名文件从copy_loc目录复制到pass_loc目录
past_loc="/Users/Desktop/newdir"
copy_loc="/Users/Desktop/*.txt"
for file in $copy_loc; do
scp "$file" "$(basename "$file" .txt).hml"
done
我不想移动文件,只要用扩展名.hml复制到新位置即可
past_loc="/Users/Desktop/newdir"
此功能目前运行正常,要添加以下功能:
从mygrepitemslist.txt(逐行)中导入搜索项目,而不是明确说明error1和error2(如果搜索中可以包含空格,则会获得额外奖励)
换言之,您需要读取文件mygrepitemslist.txt
在这个代码示例中,通过管道连接到grep
而不是在下面的代码中:
grep“error1\| error2”
mygrepitemslist.txt具有:
错误1
错误
带空格的错误3
带有多个空格的error4
我想使用我所拥有的,主要是因为我使用
我多次尝试使用bash运行可执行文件。这个可执行文件有可能会陷入无限循环或segfaults。我知道bash中没有try-catch,但我们可以使用以下方法绕过它:
{ #try
"myCommand" && "do what i want"
} || { #except
"handle error"
}
但这并不能理解无限循环。如何处理此问题?除非循环发送信号或修改系统/环境,否则Bash无法告诉您myCommand中发生了什么。你可以在后台运行你的#try&
当我试图以shell命令的形式执行liquibase命令时,我得到了这个权限被拒绝的错误
我已经为liquibase可执行文件授予了必要的权限
这在jenkins的早期版本中运行良好,并在升级jenkins后开始出现此错误
当前詹金斯版本:2.168
感谢您为解决此问题提供的任何帮助。在调用liquibase之前,我会在您的shell脚本中添加对whoami的调用,以确保它使用正确的用户运行。@SteveDonie是jenkins用户,我已为该用户授予了执行权限。在调用之前,我会在您的s
Idk出了什么问题,我只想运行一个amq代理示例…这是我的完整settings.xml(我刚刚添加了jboss amq maven存储库配置文件&还添加了jboss amq maven存储库作为我的activeprofile,其余完全是默认的…)
在我看来,使用自定义存储库的最简单方法是在使用-s开关执行Maven时在命令行上指定自定义设置文件。在您的情况下,您应该执行以下操作:
解压Red Hat AMQ Maven存储库(例如AMQ-broker-7.5.0-Maven-repositor
我试图通过ssh传递变量,并编写了两个简短的测试脚本(bash)
这一步是在另一端执行脚本(并且至少部分有效)
我从执行“mms测试alpha one”开始
#!/bin/bash
sshpass -p (password) ssh hellfire@192.168.0.11 'bash /scripts/mms2 "$@"'
执行的第二个脚本是:
#!/bin/bash
echo "$@" >/scripts/test1.txt
此脚本仅用于传输参数时进行测试
到目前为止,它
我在主目录下有180个子目录。我需要在所有180个子目录的add_report.rpt文件中grep“Unresponse”,如下所示:
tile#t/PA#u输出/添加报告.rpt
其中#表示tile1_t,tile2_t。。。。。。瓷砖180_t(因为我无法使用*)
我在当前目录中尝试了以下操作:
grep -r "Unresponse"
但我也从其他子目录以及在tile#
谁能帮我找到正确的去格雷普的路吗。
我只需要此路径的输出:
tile#_t/PA_#_output/add_repo
标签: Bash
charactertranslatetr
我正在使用tr命令删除标点符号,但它似乎没有删除66的和99的引号类型
以下是我使用的命令:
cat test.txt | tr '[:punct:]' ' '
这些:“
它确实删除了常规代码,如:“
想知道为什么吗?嗨,我想说,这里不是询问bash的好地方。尝试询问Ubuntu或超级用户(通过堆栈交换)。您更有可能得到对您有帮助的答案这是GNUtr的一个已知问题,详细介绍了解决方法。你的代码可以在macOS上运行。嗨,我想说的是,这里不是询问bash的好地方。尝试询问Ubuntu或超级用户(
如何使用sed和jq将key name中的u替换为符号a
{“产品名称”:“kl”}
应该成为
{“productaname”:“kl”}
在bash脚本中不需要sed;只需jq就可以轻松完成:
$ jq '{ productaname: .product_name }' <<<'{ "product_name":"kl" }'
{"productaname":"kl"}
$jq'{product
我有一个长字符串,同一个单词多次出现,比如:“key:value”。我想从bash中的字符串中提取这个单词的最后一次出现。谁能帮我在bash中实现它
我的字符串如下所示:
asaadfssffkey:valueaaddsdgfggfkey:valueadadfsfsffggg
并且,我尝试在bash:${parameter:offset:length}中提取子字符串,但这不是通用的,因为偏移量总是不相同的
我的预期输出将是word=>key:value的最后一次出现
我从执行jira chan
如何将for循环中的变量传递给$(shell)?我可以访问$(shell)之外的var,但我不知道如何将其传入:
❯ make --version
GNU Make 3.81
❯ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
这是我得到的输出:
A_LIST:= one two
.PHONY: loop
loop:
@for iii in $(A_LIST) ; do \
但是,正如前面所解释的,我需要的不仅仅是这些。
b) 控制台上的标准红颜色
同样,这不是什么大问题:
exec 3>&1
mycommand 2>&1>&3 | sed $'s,.*,\e[31m&\e[m,'
EXIT_CODE=${PIPESTATUS[0]} #exit status of command
exec 3>&- #housekeepin
1 2 3 4 5 6 ...
下一页 最后一页 共 916 页