标签: bash

根据 shell 在 .bashrc 中设置 PATH

我有一个switcher有不同用例的用户。这PATH应该取决于当前 shell 是否受到限制。因此我在末尾添加了/home/switcher/.bashrc

[[ $- == *r* ]] && PATH='' && echo 'restricted' || echo 'unrestricted' 
Run Code Online (Sandbox Code Playgroud)

但切换用户时却无法按预期工作:

root@host:~$ sudo -u switcher rbash
unrestricted
switcher@host:~$ echo $PATH
/home/switcher/bin:/usr/local/bin:/usr/bin:/bin
switcher@host:~$ echo $- $SHELL
himrBHs /usr/sbin/nologin
Run Code Online (Sandbox Code Playgroud)

这告诉我,这.bashrc实际上是被处决的,但显然是在外面rbash。我在这里缺少什么?我需要更改什么以便PATH=''在执行时设置rbash而不是在中设置bash

请注意,不幸的是,对于不同的用例使用不同的用户对我来说不是一个选择。

linux bash path bashrc

3
推荐指数
1
解决办法
444
查看次数

使用“at”安排的命令失败,但没有给出错误

最近了解了atUnix系统中的命令。

假设我希望一个 Python 脚本(可能会崩溃)在启动后 2 小时运行。我做了这样的事情:

$ echo python3 my_script.py | at now + 2hours 
Run Code Online (Sandbox Code Playgroud)

我有几个问题:

  1. 这是正确的做法吗?
  2. 我怎样才能捕获任何日志?因为如果脚本失败,at不会通知我,而且我无权访问该错误。
  3. 我真的很想使用它,at因为它让我的生活变得更加轻松,但它真的意味着这样做吗?我应该使用其他工具吗?

linux bash at

3
推荐指数
1
解决办法
368
查看次数

Debian Bash 关联数组自(内部)引用

我正在尝试使用 Debian Gnu-Linux 12.4、22.12.3 和 Bash 5.2.15 构建一个关联数组,其中数组中的键值对引用同一数组中的其他键值对。

例子,

declare -A test=(
    [0]=0
    [1]=1
    [2]=2
    [3]=$((test[1]+test[2]))
    [4]="${test[1]} ${test[2]}"
)
Run Code Online (Sandbox Code Playgroud)

当我在 Konsole 中执行以下 echo 语句时,

echo "${test[1]}"
echo "${test[2]}"
echo "${test[3]}"
echo "${test[4]}"
Run Code Online (Sandbox Code Playgroud)

我有时会得到这样的结果,

1
2
0

Run Code Online (Sandbox Code Playgroud)

有时我得到了我想要的

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

由于这种不一致(这可能完全是我的行为造成的),我有几个问题。

  1. 这可以做到吗?
  2. 如果是,有正确的方法吗?

另外,我找不到一致的方法来复制这两个不同的结果,无论发生什么或如何发生。

debian bash array

3
推荐指数
1
解决办法
306
查看次数

Bash [[ test =~ regex ]] 与 perl 命令结果

bash 运算符=~相当于perl调用吗?

filename="test-33.csv"
regex="([^.]+)(-\d{1,5})(\.csv)"
Run Code Online (Sandbox Code Playgroud)

通过 bash 测试:

filename="test-33.csv"
regex="([^.]+)(-\d{1,5})(\.csv)"
Run Code Online (Sandbox Code Playgroud)

perl

if [[ "$filename" =~ $regex ]]; then echo "it matches"; else echo "doesn't match"; fi
# doesn't match

if [[ "$filename" =~ ([^.]+)(-\d{1,5})(\.csv) ]]; then echo "matches"; else echo "doesn't match"; fi
# doesn't match
Run Code Online (Sandbox Code Playgroud)

我对 bash 操作符有什么遗漏吗=~?这与贪婪与非贪婪迭代器 ( ) 有关系吗[^.]+

bash regex perl bash-scripting

3
推荐指数
1
解决办法
570
查看次数

为什么我的路径*现在*不更新?

我最近安装了最新的 Qt SDK,然后我继续将它添加到我的 ~/.bash_profile 中的 PATH 中。

我没有看到变化。我可以,source ~/.bash_profile但是我的路径是两倍长,但我不能简单地打开一个新的 gnome 终端并更新路径。

为什么?

注意:Fedora 11 在默认 gnome 桌面内运行 GNU bash,版本 4.0.16(1)-release。

.bash_profile 路径配置:

# User specific environment and startup programs

PATH=$PATH:$HOME/bin:/opt/qtsdk-2009.03/qt/bin/:/usr/local/lib/
Run Code Online (Sandbox Code Playgroud)

fedora bash path

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

bash 的符号链接会启动其他一些 shell

在以下 bash 会话中,我将 /bin/sh 符号链接到 /bin/bash。但是,当我运行 /bin/sh 时,结果与运行 /bin/bash 不同......知道那里发生了什么吗?

benno@benno-laptop:~$ ls -l /bin/sh
lrwxrwxrwx 1 root root 9 2009-08-28 19:56 /bin/sh -> /bin/bash
benno@benno-laptop:~$ /bin/sh
sh-3.2$ exit
exit
benno@benno-laptop:~$ /bin/bash
benno@benno-laptop:~$ exit
exit
benno@benno-laptop:~$
Run Code Online (Sandbox Code Playgroud)

bash

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

允许在 Ubuntu 9.10 中不关闭 rdesktop 窗口的情况下关闭生成 rdesktop 的终端

运行 Ubuntu 9.10,当我执行时:

rdesktop 147.145.168.224 &
Run Code Online (Sandbox Code Playgroud)

出现远程桌面窗口,命令似乎在执行它的 shell 中结束,因为我可以执行更多命令;但是,当我关闭外壳时,远程桌面窗口也随之关闭。如何生成 rdesktop 进程,使其在生成它的终端关闭时保持打开状态?我似乎没有与运行相同的问题:

firefox &
Run Code Online (Sandbox Code Playgroud)

terminal bash rdesktop ubuntu

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

将命令应用于目录中的所有文件,一次一个目录

我想将重放信息应用于我的音乐收藏中的所有 MP3 文件。为此,我使用了一个名为mp3gain的工具(在 Linux 上)。

为了正确应用专辑增益,我需要在每个目录的基础上运行 mp3gain 命令。换句话说,我需要找到一个目录,对该目录中的所有文件运行 mp3gain,然后对每个其他目录重复。到目前为止,我想出了这个:

 find . -type d -exec mp3gain {}/*.mp3 \;
Run Code Online (Sandbox Code Playgroud)

输出如下所示(仅显示多个目录中的几个):

[...]
./dev2/Physicist/*.mp3
Can't open ./dev2/Physicist/*.mp3 for reading
./Real Things/*.mp3
Can't open ./Real Things/*.mp3 for reading

在我看来,' *' 正在被转义,因此它不是查找以 '.mp3' 结尾的所有文件,而是查找名为 ' *.mp3'的文件。

我应该使用什么命令?

bash find

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

扩展 wget --page-requisites 的脚本?

我今天发布了一个非常相似的问题,但我想再次提出 wget/linux 焦点。我希望一切顺利。

我需要在 LAMP 堆栈上以编程方式创建网页的离线副本,最好使用 PHP。我需要 HTML 源代码、附加图像和 CSS 样式表。

我可以在命令行上运行东西,但不能安装新包。

我可以wget --page-requisites在要存档的页面上执行操作。这会下载我需要的所有内容,但它不会修改下载的 HTML 和 CSS 文件以指向存档文件。

我正在寻找一个扩展/Perl 脚本/shell 脚本,它修改下载的文档以指向下载的资源,或者可能是一个不同的、基于 Linux 的解决方案。我已经检查过,httrack似乎没有安装在服务器上(“whereis httrack”什么都不返回)。

linux bash shell perl wget

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

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

标签 统计

bash ×10

linux ×3

path ×2

perl ×2

archiving ×1

array ×1

at ×1

bash-scripting ×1

bashrc ×1

debian ×1

fedora ×1

find ×1

rdesktop ×1

regex ×1

shell ×1

tar ×1

terminal ×1

ubuntu ×1

wget ×1