如果我在根终端中su,那么一切都很好:完成在任何地方都可以。
如果作为普通用户,我尝试使用sudo访问/root/目录,例如,如果我想打开/root/.selected_editor.
当我达到 /ro 完成时,它仍然正常并写入/root/,但随后它停止工作。如果我写完想要手动执行的 Linux Bash 命令,那么这个命令就可以正常工作。
root@Xfce:~# cat .se(lected_editor) ---> completion is OK
xxx@Xfce:~$ sudo cat /ro(ot/) ---> completion is still OK
xxx@Xfce:~$ sudo cat /root/.se( ) ---> completion has stopped working
Run Code Online (Sandbox Code Playgroud)
为了看看我是否可以列出里面的内容/root/,我尝试了 sudo ls -a /root/,并且我得到了正确的列表。然后我在另一台安装了 Debian 11 的笔记本电脑上尝试,它的行为完全一样。
系统:配备Debian 11 (Bullseye) 和Xfce 的笔记本电脑
我的计划是编写一个脚本来调试远程 Web 服务器。
由于调试端口被防火墙阻止,我需要通过 ssh 将远程端口转发到本地计算机。这部分工作正常。
在调试模式下运行服务器的命令会阻塞终端。因此,当我按 CTRL C 时,服务器应该停止。但是,当我完成调试后,我希望服务器以正常模式再次启动。所以我添加了一个 trap 命令。
这是我目前的方法:
ssh -tt my.server -L 8001:localhost:8000 <<'ENDSSH'
trap 'start server as service in normal mode' 2
stop server
start server in debug mode
ENDSSH
Run Code Online (Sandbox Code Playgroud)
但是,当我按 CTRL C 时,ssh 连接将终止,并且陷阱内的命令不会执行。
在这里完成脚本新手。需要帮忙。
我试图了解以下 bash 脚本是如何运行的
trim_string() {
# Usage: trim_string " example string "
: "${1#"${1%%[![:space:]]*}"}"
: "${_%"${_##*[![:space:]]}"}"
printf '%s\n' "$_"
}
Run Code Online (Sandbox Code Playgroud)
我认为 : 作为无操作运行,但据我所知。
提前致谢
我想在 bash 中将“history-search-backward”readline 命令的键绑定设置为Control + 一些其他键的组合(我以2为例),但我无法这样做。
(编辑:似乎问题是我选择2作为示例键。我尝试使用 \Cl 并且它正在工作。如果有人解释为什么 2 不起作用,我仍然会接受答案)
经过几次尝试,我的 ~/.inputrc 现在看起来像这样
set bind-tty-special-chars off
"\C-2": history-search-backward
Run Code Online (Sandbox Code Playgroud)
但它不起作用并绑定 -p | grep "-2" 什么也没给。如果我在没有控制键的情况下尝试某些操作,它会起作用:
"C-2": history-search-backward
Run Code Online (Sandbox Code Playgroud)
我可以通过按序列 C + - + 2 在历史记录中进行搜索。
bind -p 以 \C 形式给出控制,例如:
"\C-w": unix-word-rubout
Run Code Online (Sandbox Code Playgroud)
我在 inputrc 中尝试了不同的格式:
Control-2: history-search-backward
Ctrl-2: history-search-backward
"Control-2": history-search-backward
Run Code Online (Sandbox Code Playgroud)
但没有任何效果。
"\e2": history-search-backward
Run Code Online (Sandbox Code Playgroud)
如果我按 Escape 然后按 2 就可以了。
任何人都可以帮忙吗?
设置:
Fedora 11:
Bash 版本 4.0.23(1)
GNU Readline 5.2(根据手册页)
我想将以下命令行序列保存为 bash 别名:
grep `date '+%d/%b/%Y'` access.logs | egrep 2765330645ae47d292c9ceac725d744e.py |awk '{print $1, $4, $5, $7, $8, $9, $10}' | sort |uniq -c -w15 |sort -n
Run Code Online (Sandbox Code Playgroud)
它在命令行中运行良好,但当我尝试将其设置为别名时失败。我尝试将以下内容添加到 .bash_profile:
alias downloads="grep `date '+%d/%b/%Y'` access.logs | egrep 2765330645ae47d292c9ceac725d744e.py |awk '{print $1, $4, $5, $7, $8, $9, $10}' | sort |uniq -c -w15 |sort -n"
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
-bash-3.2$ downloads
awk: {print , , , , , , 0}
awk: ^ syntax error
awk: {print , , , , , , 0}
awk: ^ syntax …Run Code Online (Sandbox Code Playgroud) 我有一个脚本,我想接受任意数量的命令行参数。
到目前为止我有
如果 [ -O $1 ] ; 然后 echo "你是 $1 的所有者" 别的 echo "你不是 $1 的所有者" 菲
显然,如果我希望脚本只接受一个参数,这将起作用,但是对于任何数量的参数都有效。
前任。./脚本 f f1 f2 f3
我似乎经常在 bash 方式上输入 reset 命令。
我想将其配置为键盘快捷键。
说 Ctrl+r 或类似的东西。
怎么做。
更新:
为了回答这个问题,我为什么要这样做,而不仅仅是清楚,
很多时候,我想查看 git(或 svn 或 hg)差异,并且从顶部重新开始很方便,而不必担心命令在哪里。
很多时候,当用作服务器时,bash 上的字符会被吃掉(而不是显示),并且完成了一些 Python 的工作(我知道这是 bash 的问题,因为 zsh 和 fish 没有问题)。让它恢复工作的唯一方法是重置。
我想使用正则表达式重命名文件夹中的所有文件(在名称末尾添加名称)并移动到另一个文件夹。
在我看来,它应该是这样的:
mv -v ./images/*.png ./test/*test.png,但它不起作用。
谁能建议我一个解决方案?
我通常输入来编辑文件的是:
sudo vim Example.php
Run Code Online (Sandbox Code Playgroud)
我想打字
sim Example.php
Run Code Online (Sandbox Code Playgroud)
作为捷径。我知道我可以在 bash 配置文件中设置别名,但是如何在别名中指定参数?在这种情况下,参数是文件名。
我有以下代码行,用于将项目中的个人日期变量更新为今天的当前日期。这条线在 Ubuntu 的终端中有效,但 Mac 终端似乎远远落后。不幸的是,我从某个网站复制了这个片段,所以我不确定它是如何工作的。建议?
grep -ilr --exclude=revar.sh --exclude=README.md "[DATE]" * |
grep -v .git | xargs -i@ sed -i "s/\[DATE\]/${today}/g" @
Run Code Online (Sandbox Code Playgroud)