我有一个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?
请注意,不幸的是,对于不同的用例使用不同的用户对我来说不是一个选择。
最近了解了atUnix系统中的命令。
假设我希望一个 Python 脚本(可能会崩溃)在启动后 2 小时运行。我做了这样的事情:
$ echo python3 my_script.py | at now + 2hours
Run Code Online (Sandbox Code Playgroud)
我有几个问题:
at不会通知我,而且我无权访问该错误。at因为它让我的生活变得更加轻松,但它真的意味着这样做吗?我应该使用其他工具吗?我正在尝试使用 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)
由于这种不一致(这可能完全是我的行为造成的),我有几个问题。
另外,我找不到一致的方法来复制这两个不同的结果,无论发生什么或如何发生。
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 操作符有什么遗漏吗=~?这与贪婪与非贪婪迭代器 ( ) 有关系吗[^.]+?
我最近安装了最新的 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) 在以下 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) 运行 Ubuntu 9.10,当我执行时:
rdesktop 147.145.168.224 &
Run Code Online (Sandbox Code Playgroud)
出现远程桌面窗口,命令似乎在执行它的 shell 中结束,因为我可以执行更多命令;但是,当我关闭外壳时,远程桌面窗口也随之关闭。如何生成 rdesktop 进程,使其在生成它的终端关闭时保持打开状态?我似乎没有与运行相同的问题:
firefox &
Run Code Online (Sandbox Code Playgroud) 我想将重放信息应用于我的音乐收藏中的所有 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'的文件。
我应该使用什么命令?
我今天发布了一个非常相似的问题,但我想再次提出 wget/linux 焦点。我希望一切顺利。
我需要在 LAMP 堆栈上以编程方式创建网页的离线副本,最好使用 PHP。我需要 HTML 源代码、附加图像和 CSS 样式表。
我可以在命令行上运行东西,但不能安装新包。
我可以wget --page-requisites在要存档的页面上执行操作。这会下载我需要的所有内容,但它不会修改下载的 HTML 和 CSS 文件以指向存档文件。
我正在寻找一个扩展/Perl 脚本/shell 脚本,它修改下载的文档以指向下载的资源,或者可能是一个不同的、基于 Linux 的解决方案。我已经检查过,httrack似乎没有安装在服务器上(“whereis httrack”什么都不返回)。
可以用tar吗?我必须写一个 bash 脚本吗?