标签: bash-scripting

无法在 Ubuntu 中通过 bash 脚本编辑“/etc/network/interfaces”文件

可能的重复:
sudo 权限被拒绝

我需要通过 bash 脚本编辑 /etc/network/interfaces,我正在做如下的事情......

sudo echo something > /etc/network/interfaces

当执行此行时,我收到下面提到的错误: bash: /etc/network/interfaces: Permission denied

但是如果我用某个编辑器编辑同一个文件,它可以完美地工作......即

sudo nano /etc/network/interfaces

上面让我编辑这个文件。

linux bash command-line bash-scripting

2
推荐指数
1
解决办法
8615
查看次数

Bash:查找和替换文本字符串

我认为这很容易,但我忽略了一些简单的事情:

我有一个名为test. 例如,它包含字符串Alfred Hitchcock。我想用Alfred\ Hitchcock.

我想这会做到:

grep -r1 ' ' /path/to/test | xargs sed -i 's/ /\ /g'
Run Code Online (Sandbox Code Playgroud)

但它告诉我:

sed: can't read Alfred: No such file or directory
sed: can't read Hitchcock: No such file or directory
Run Code Online (Sandbox Code Playgroud)

不太确定发生了什么。任何帮助都会很棒,谢谢。

bash grep sed bash-scripting

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

virtualbox 增加 cpu 核心脚本明智

1x cpu 内核对于 SMB 文件共享 Ubuntu 盒是不够的。

我们如何在午夜关闭虚拟机,增加 CPU 内核 1->2,然后打开那个盒子(脚本方式)?

(它是一个 Windows 主机......但也欢迎 Linux 示例 :)

截图在这里 - > http://dwaves.de/index.php/2014/09/22/virtualbox-box-management/

linux cpu virtualbox shell bash-scripting

2
推荐指数
1
解决办法
8153
查看次数

如何从Linux中的文件中grep多行

我有一个包含以下内容的文件。

.
.
hello
.
.
.
world
.
.
hello
.
.
.
.
.
world
.
.
Run Code Online (Sandbox Code Playgroud)

点表示文件中的其他行。这里我只需要 gerp hello 和 world 行。这意味着输出应该如下所示。

hello
world
hello
world
Run Code Online (Sandbox Code Playgroud)

如何做到这一点?

谢谢,

linux bash administrator ubuntu bash-scripting

2
推荐指数
1
解决办法
6609
查看次数

多文件 BASH 脚本的最佳实践?

我正在做的是这样的:

我想将我的脚本分成多个块。在一个地方定义所有变量的最佳实践是什么?我应该在 init 脚本中将它们全部定义并导出,还是有更好的方法让我的脚本的每一部分都查看一个静态变量文件?也许是 JSON 之类的?这是一个例子

项目/main.sh

#!/bin/bash

new_user="poopmacscoop"
a_list_of_packages="pyhon3 nmap apache2.... others"
some_other_info_for_another_script="important info"

menu () {
    read # blah blah whatcha wanna run?
    # other bits
}   
opts () {
    case ... # a bunch of options
    1) ./src/another_script.sh # one of a bunch of scripts in a separate folder
}
while true
do
   menu
   opts
done
Run Code Online (Sandbox Code Playgroud)

现在在 ./src/another_script.sh 脚本中,为了轻松和跳转能力处理 vars 的最佳方法是什么?(这是一个技术术语)

bash bash-scripting

2
推荐指数
1
解决办法
2075
查看次数

如何查看git log自动刷新

我正在尝试创建一个脚本,该脚本应该git log每 1 秒刷新一次。这就是我所拥有的:

while :
do
clear
git log --all --decorate --oneline --graph
sleep 1
done
Run Code Online (Sandbox Code Playgroud)

它不起作用,因为git log等待用户点击q退出 - 因此循环被卡住了。我怎样才能解决这个问题?

bash git bash-scripting

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

macOS 终端在目录中查找最新文件

我正在编写(我认为会是)一个快速的小bash功能来识别Photos.app从 DSLR导入到 Apple 标准的最新照片。

到目前为止,它看起来像这样:

find ~/Pictures/Photos\ Library.photoslibrary/Masters -type f

很简单。照原样,它列出了整个导入照片库。我的第一直觉是简单| tail -n 1,但文件没有以任何可辨别的顺序列出。

我考虑过| sort -V,但文件名(即IMG_0123.CR2)出现乱序并不少见。

仅供参考:此 BSD 版本find不支持-printfGNU 版本中的选项。

command-line find timestamp bash-scripting macos

2
推荐指数
1
解决办法
4806
查看次数

通过将重复文件与 MD5 进行比较来删除重复文件

我想根据它们的 MD5 值删除重复的文件。我已经在下面找到了脚本,但是如何修改它以使其递归运行?

因此,例如我有包含 3 个子文件夹 A B C 的文件夹

我希望 ./ ./A/ ./B/ ./C/ 中的所有文件检查它们的 md5 并相互比较,如果发现正匹配,则随机删除任一匹配。最终不再存在重复项。我不在乎哪个匹配首先被删除。

我希望我清楚地表达了我需要实现的目标,如果没有,请告诉我:)

#!/bin/bash
while true
do
  echo "Enter the directory:"
  read directory
  if [ -d $directory ]; then
    break
  else
    echo "Invalid directory"
  fi
done

for FILE in `ls $directory`
do
  if [ ! -f $FILE ]; then
    break;
  fi
  h=`md5sum $directory/$FILE | awk '{ print $1 }'`
  for f in `ls $directory`
  do
    if [ -f $f ] && [ $FILE != …
Run Code Online (Sandbox Code Playgroud)

script bash bash-scripting

2
推荐指数
1
解决办法
3329
查看次数

查找带有大写扩展名的文件名

如何在目录中递归地找到所有带有大写扩展名的文件。

我试过了 :

$ find -name "*.[A-Z][A-Z][A-Z]"
Run Code Online (Sandbox Code Playgroud)

似乎有效,但当然这不会检查最后一个点后超过 3 个字母的文件。

bash sh bash-scripting

2
推荐指数
1
解决办法
621
查看次数

在分词子shell输出时让bash尊重引号

我有一个命令,它输出一些我想传递给另一个命令的参数。但是,当我在子 shell 中运行命令时,输出会受到分词,除非我引用整个内容,在这种情况下,它是单个词。

我希望 subshel​​l 输出拆分单词,但我希望单词拆分尊重引号,但事实并非如此。有什么方法(除了eval)可以将子shell输出拆分为单词但尊重引号?

细节

鉴于args命令定义为

#!/bin/sh -
printf "%d args:" "$#"
printf " <%s>" "$@"
echo
Run Code Online (Sandbox Code Playgroud)

我可以跑

$ args 'foo bar' 'one two'
2 args: <foo bar> <one two>
Run Code Online (Sandbox Code Playgroud)

但我找不到一种方法让子shell 传递 2 个参数。

$ echo "\"'foo bar'\" 'one two'"
"'foo bar'" 'one two'
$ args $(echo "\"'foo bar'\" 'one two'")
4 args: <"'foo> <bar'"> <'one> <two'>
$ args "$(echo "\"'foo bar'\" 'one two'")"
1 args: <"'foo bar'" 'one two'>
Run Code Online (Sandbox Code Playgroud)

当然,我可以使用 eval …

bash bash-scripting

2
推荐指数
1
解决办法
596
查看次数

标签 统计

bash-scripting ×10

bash ×8

linux ×3

command-line ×2

administrator ×1

cpu ×1

find ×1

git ×1

grep ×1

macos ×1

script ×1

sed ×1

sh ×1

shell ×1

timestamp ×1

ubuntu ×1

virtualbox ×1