标签: bash

完成后停止在 /root 目录中工作

如果我在根终端中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 的笔记本电脑

debian bash tab-completion

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

ssh 内带有陷阱的 Unix 脚本

我的计划是编写一个脚本来调试远程 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 连接将终止,并且陷阱内的命令不会执行。

在这里完成脚本新手。需要帮忙。

ssh unix terminal bash

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

Bash 修剪功能

我试图了解以下 bash 脚本是如何运行的

trim_string() {
    # Usage: trim_string " example string "
    : "${1#"${1%%[![:space:]]*}"}"
    : "${_%"${_##*[![:space:]]}"}"
    printf '%s\n' "$_"
}
Run Code Online (Sandbox Code Playgroud)

我认为 : 作为无操作运行,但据我所知。

提前致谢

linux bash

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

如何将函数绑定到 bash 上的 Control-2 键组合

我想在 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

4
推荐指数
1
解决办法
1864
查看次数

在 linux 上使用命令行作为 bash 别名时出错

我想将以下命令行序列保存为 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)

linux bash alias awk command-line

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

如何编写脚本来接受任意数量的命令行参数?(UNIX, BASH)

我有一个脚本,我想接受任意数量的命令行参数。

到目前为止我有

如果 [ -O $1 ] ; 然后
  echo "你是 $1 的所有者"
别的
  echo "你不是 $1 的所有者"
菲

显然,如果我希望脚本只接受一个参数,这将起作用,但是对于任何数量的参数都有效。

前任。./脚本 f f1 f2 f3

unix script bash

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

在 bash 上重置的快捷方式

我似乎经常在 bash 方式上输入 reset 命令。

我想将其配置为键盘快捷键。

说 Ctrl+r 或类似的东西。

怎么做。

更新:

为了回答这个问题,我为什么要这样做,而不仅仅是清楚,

  1. 很多时候,我想查看 git(或 svn 或 hg)差异,并且从顶部重新开始很方便,而不必担心命令在哪里。

  2. 很多时候,当用作服务器时,bash 上的字符会被吃掉(而不是显示),并且完成了一些 Python 的工作(我知道这是 bash 的问题,因为 zsh 和 fish 没有问题)。让它恢复工作的唯一方法是重置。

linux gnome bash gnome-terminal ubuntu

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

Unix Bash 使用正则表达式重命名文件

我想使用正则表达式重命名文件夹中的所有文件(在名称末尾添加名称)并移动到另一个文件夹。

在我看来,它应该是这样的:

mv -v ./images/*.png ./test/*test.png,但它不起作用。

谁能建议我一个解决方案?

bash rename mv

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

如何在bash中为“sudo vim(文件名)”设置别名作为sim(文件名)

我通常输入来编辑文件的是:

sudo vim Example.php
Run Code Online (Sandbox Code Playgroud)

我想打字

sim Example.php
Run Code Online (Sandbox Code Playgroud)

作为捷径。我知道我可以在 bash 配置文件中设置别名,但是如何在别名中指定参数?在这种情况下,参数是文件名。

linux bash vim

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

xargs 命令适用于 ubuntu,但不适用于 mac

我有以下代码行,用于将项目中的个人日期变量更新为今天的当前日期。这条线在 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)

bash macos

4
推荐指数
1
解决办法
6965
查看次数

标签 统计

bash ×10

linux ×4

unix ×2

alias ×1

awk ×1

command-line ×1

debian ×1

gnome ×1

gnome-terminal ×1

macos ×1

mv ×1

rename ×1

script ×1

ssh ×1

tab-completion ×1

terminal ×1

ubuntu ×1

vim ×1