标签: bash

如何更有效地将文件切成碎片?

假设我有一个 10MB 的文本文件foo.txt,它有 100,000 行。现在,我想foo.txt逐个窗口处理,窗口大小为 10。

我目前的脚本是这样的:

for ((i=0;i<$lines;i=i+$step))
do    
    head -$((i+step)) $1 | tail -$step > tmp1
    head -$((i+step)) $2 | tail -$step > tmp2
    setstr=$setstr' '`./accuracy.sh tmp1 tmp2`
done
echo $setstr | awk '{for (i=1;i<=NF;i++) sum+=$i; }END{print sum/NF}'
Run Code Online (Sandbox Code Playgroud)

但它运行缓慢。有什么简单有效的方法可以做到这一点吗?

script bash shell file-io

4
推荐指数
1
解决办法
303
查看次数

当默认 shell 与 bash 不兼容时,为什么 bash 脚本不能正常工作?

我的默认外壳是鱼,因为它更好。但通常当我运行脚本时,我收到的错误似乎是由 fish 处理的 bash 脚本引起的。我认为这是因为脚本编写者假设默认的 shell 是 bash,但我不明白其中的机制。

例如,CrashPlan install.sh 脚本以 bash shebang 开头:

~/CrashPlan-install> head install.sh
#!/bin/bash

#############################################################
# Linux Client Installer Script
#############################################################
Run Code Online (Sandbox Code Playgroud)

所以当我运行./install.sh它时,它应该由 bash 处理,对吗?默认终端外壳应该是无关紧要的。然而,当我的默认 shell 是 fish 时,运行这样的脚本会导致 fish 返回错误,就好像它正在处理脚本一样:

fish: Expected a command name, got token of type “Run job in background”. Did you mean
 “COMMAND; and COMMAND”? See the help section for the “and” builtin command by typing “help and”.
Standard input: sed -imod "s|Exec=.*|Exec=/usr/local/crashplan/bin/CrashPlanDesktop|" 
 /home/username/Desktop/CrashPlan.desktop && rm -rf /home/username/Desktop/CrashPlan.desktopmod 
Run Code Online (Sandbox Code Playgroud)

这是因为我的计算机配置错误还是因为脚本是以不可移植的方式编写的?

bash shell-script chsh fish

4
推荐指数
1
解决办法
3235
查看次数

在另一个用户的权限下自动执行bash脚本

有没有办法在另一个用户的权限下(自动)执行 bash 脚本?我认为“sudo”是正确的方法,但我不知道如何自动化该过程。

例如,我想运行这样的程序(用户“bla”在“blub”下运行一个进程):

sudo <the user under which i want to run the process> <path to script>
Run Code Online (Sandbox Code Playgroud)

linux script sudo privileges bash

4
推荐指数
1
解决办法
6223
查看次数

如何直接从 shell 将数字列表通过管道传输到命令中?

如何直接从 shell 将数字列表通过管道传输到命令中?例如这样的事情

[1,2,3,4] | sort
Run Code Online (Sandbox Code Playgroud)

会给

1
2
3 
4
Run Code Online (Sandbox Code Playgroud)

编辑:

回应到目前为止友好发布的答案。. . 我问这个,因为我想快速测试和调试一个控制台应用程序,该应用程序在输入时需要输入许多数字,而不必键入许多单独的值,然后回车。我只想输入“one liner”,然后不时点击向上箭头,然后重播命令。理想情况下,我希望在不使用包含值的文本文件的情况下执行此操作(这显然是最简单的方法。)

bash shell pipe syntax

4
推荐指数
1
解决办法
1084
查看次数

自定义终端提示会覆盖自身,并且通常在 OS X Terminal.app 上表现不正常

我在 bash_profile 中设置了以下提示:

export PS1='\[\e[1;94m\h:\W \u\e[1;93m\$\e[0m \]'
# default = '\h:\W \u\$ '
Run Code Online (Sandbox Code Playgroud)

不幸的是,在某些情况下我遇到了问题:

  • 在空白提示下,我输入一个字符,然后按退格键 - 提示被完全删除,光标移到终端的左边缘,而不是简单地删除该字符

  • 如果我使用向上和向下箭头键自动完成跨越多行的命令,则只有当前行更改,但上面的行(在提示之后)保持不变

我如何更正我的提示,使其在所有情况下都像默认提示一样正常运行?

terminal bash macos

4
推荐指数
1
解决办法
1266
查看次数

在 shell 上运行命令并在 vim 中获取输出

我知道如何使用:!rand在 vim 中运行 shell 命令:!,但是有没有办法从外部(即从 bash)执行此操作?

类似的东西vim 'ls -al'。的输出ls应该在 vim 中并且是可编辑的。

bash vim shell

4
推荐指数
2
解决办法
389
查看次数

为什么.sh文件中的“cd -”会打印地址

我使用“cd -”在文件夹之间切换。喜欢:

cd /etc/                                                                                                                          
cd -   
Run Code Online (Sandbox Code Playgroud)

但是为什么“cd -”会打印地址(如密码)?我怎样才能阻止它打印地址?

linux bash shell

4
推荐指数
1
解决办法
665
查看次数

别名会减慢 shell 的启动速度吗?

有时,我的 shell (zsh) 启动时间比平时长(我打开终端,在我可以输入命令之前它会挂起一点)。

我有我的几个别名.zshrc(当然,实际上他们是在一个不同的文件.zshrc做了source上)。

如果你做一个alias与外壳打开,则只能通过当前的会话仍然有效,所以我就开始怀疑这一切sourcealias实际损害的shell启动的性能(我假设它要经过运行所有的漫长过程启动命令)。

如果确实发生了这种情况,将这些别名作为 shell 脚本并将它们放在我的PATH某处不是更有效吗?

bash zsh shell alias macos

4
推荐指数
1
解决办法
1020
查看次数

获取网卡mac地址的简单方法

我使用了很多涉及网卡 Mac 地址的脚本。是否有我可以读取的文件或我可以用来获取 Mac 地址的命令?我不想要任何标题或任何东西,只需要 1 行具有 Mac 地址的输出。我想在登录时将其设置为环境变量。我使用 Arch Linux x64

networking bash mac-address arch-linux

4
推荐指数
1
解决办法
1万
查看次数

.bashrc 中定义的别名在管道后不起作用

我遇到了以下问题。

我在.bashrc(和.bash_profile)中定义了一个别名:

alias echo2="echo"
Run Code Online (Sandbox Code Playgroud)

这很有效:

$ echo2 "test"
test
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试在重定向后使用它,则它不起作用:

ls | awk '{print "echo2 "$1}' | bash
bash: line 1: echo2: command not found
bash: line 2: echo2: command not found
...
Run Code Online (Sandbox Code Playgroud)

有人知道为什么吗?我怎样才能让它工作?

bash alias bashrc pipe

4
推荐指数
1
解决办法
1603
查看次数