标签: bash

以不同的用户身份运行部分 bash 脚本

有没有办法让脚本的一部分以不同的(非 root)用户身份运行?如果有帮助,将作为不同用户运行的部分出现在脚本的末尾。

编辑:
操作系统-> Ubuntu 9.04

linux bash user

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

为什么文件夹必须是可执行的?

文件权限:

chmod 664 myFile // rw-rw-r--
Run Code Online (Sandbox Code Playgroud)

对于文件夹:

chmod 774 myFolder // rwxrwxr--
Run Code Online (Sandbox Code Playgroud)

如果我只使用“读写”权限,文件夹将不会显示其内容。

这是什么原因?

linux bash

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

多行 bash 命令中的注释

这个单命令的 BASH 脚本文件很难理解,所以我想为每个动作写一个注释:

echo 'foo'     \
| sed 's/d/a/' \
| sed 's/e/b/' \
| sed 's/f/c/' \
> myfile
Run Code Online (Sandbox Code Playgroud)

(sed 只是一个例子,实际上它是 grep、trs 和 awks 的混合体)

我讨厌不得不重复行,或者让每条评论远离它适用的行。
但同时 BASH 似乎不允许“内嵌”注释。

任何优雅的方法来解决这个问题?

bash comments sh pipe

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

在 bash 中,如何重命名文件而不重复路径?

可能的重复:
在 bash 命令上重用文本

如果我想将一个文件重命名到几个目录深处,如何避免重复路径?

例如:

mv path/to/old_filename.txt path/to/new_filename.txt
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法做到这一点:

mv path/to/old_filename.txt (?)new_filename.txt
Run Code Online (Sandbox Code Playgroud)

哪里(?)可以说“在同一目录中”。

bash rename mv

41
推荐指数
4
解决办法
3452
查看次数

如何更改 Cygwin 中的默认启动目录?

每当我启动 cygwin 时,我都需要 cd 几个级别到我在使用 cygwin 时关心的唯一目录。

默认情况下,如何让 cygwin 在这个特定目录中启动……即,每次我启动 Cygwin 时,它都已经在该目录中了?

我发现了一些可能是它或接近的东西,但我不理解它们,并且当我搜索这些 (n00b) 术语时确实没有结果。任何帮助都会很棒!

linux cygwin bash

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

如何制作自己的“shell 命令”(例如 mkdir/cd 组合)?

我不知道有多少次我希望有一个既可以创建目录又可以移动到该目录的命令。基本上,我想要相当于以下内容:

mkdir -p /arbitrarily/long/path; cd /arbitrarily/long/path
Run Code Online (Sandbox Code Playgroud)

但只需要输入/arbitrarily/long/path一次,例如:

mk-cd /arbitrarily/long/path
Run Code Online (Sandbox Code Playgroud)

我尝试创建一个脚本来执行此操作,但它只会更改脚本中的目录。我希望 shell 中的目录也已更改。

#!/bin/bash
mkdir $1
cd $1
export PWD=$PWD
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

bash

41
推荐指数
3
解决办法
5222
查看次数

如何将别名传递给 sudo?

我试过把我的别名放在~/.bash_profile, ~/.bashrc, /etc/profile, 和 中/etc/bashrc

我仍然无法执行以下操作:

alias zf2="php public/index.php"
Run Code Online (Sandbox Code Playgroud)

然后执行:

sudo zf2 orm:info
Run Code Online (Sandbox Code Playgroud)

问题似乎是我无法使用 visudo 将别名指定为命令——这会导致语法错误。

所以我无法调用:

sudo zf2 orm:info
Run Code Online (Sandbox Code Playgroud)

但是,我能够在 /usr/share/scripts/zf2 创建一个脚本,其中包含:

#!/bin/bash

alias zf2="php public/index.php"
zf2 $1
Run Code Online (Sandbox Code Playgroud)

并将此脚本添加为 visudo 中的命令。当此脚本位于最终用户的 PATH 中时,我可以执行

zf2 orm:info
Run Code Online (Sandbox Code Playgroud)

我有不同的别名zf2,我需要向最终用户公开。我更愿意维护别名而不是脚本集合。

sudo bash alias

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

历史文件可以在bash中统一吗?

我经常screen在我的 Linux 桌面和服务器上运行多个会话。

一个问题是,当我grep查看我的命令历史记录时,我发现我在不同的会话中发出了一个命令,并且必须分离并重新附加才能获取该历史记录项目。

是否可以将多个会话中不同更新的历史“强制”全部转到中央历史?

linux bash

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

将“tail -f”输出写入另一个文件

作为我上一篇文章的延续,我曾经在那里grep & tail -f找到“罕见”事件的发生。我想把它记录在另一个文件中。

我试过转

tail -f log.txt | egrep 'WARN|ERROR'
Run Code Online (Sandbox Code Playgroud)

进入

tail -f log.txt | egrep 'WARN|ERROR' | tee filtered_output.txt
Run Code Online (Sandbox Code Playgroud)

该文件已创建,但没有填充任何内容,这是缓存问题还是其他问题?我如何将尾部的输出实时附加到新文件中?

cygwin bash grep logging

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

grep 表示“术语”并排除“另一个术语”

我正在尝试构建一个 grep 搜索来搜索一个术语,但排除具有第二个术语的行。我想使用多个-e "pattern"选项,但这没有用。

这是我尝试过的命令及其生成的错误消息的示例。

grep -i -E "search term" -ev "exclude term"
grep: exclude term: No such file or directory
Run Code Online (Sandbox Code Playgroud)

在我看来,这-v适用于所有搜索词/模式。由于此运行但随后不包含search term在结果中。

grep -i -E "search term" -ve "exclude term"
Run Code Online (Sandbox Code Playgroud)

linux search bash grep

40
推荐指数
3
解决办法
9万
查看次数

标签 统计

bash ×10

linux ×5

cygwin ×2

grep ×2

alias ×1

comments ×1

logging ×1

mv ×1

pipe ×1

rename ×1

search ×1

sh ×1

sudo ×1

user ×1