我感觉当我输入git add
->时Tab它只会提供有意义的文件 - 即未跟踪或修改的文件。
无论如何,现在相当长一段时间它都会列出每个文件。
我进行了一些研究,发现/usr/share/bash-completion/completions/git
我认为它具有我想要的功能。知道为什么它可能无法正常工作吗?
使用 CentOS Stream 9 和 git 2.43.5
我感觉当我输入git add
->时Tab它只会提供有意义的文件 - 即未跟踪或修改的文件。
无论如何,现在相当长一段时间它都会列出每个文件。
我进行了一些研究,发现/usr/share/bash-completion/completions/git
我认为它具有我想要的功能。知道为什么它可能无法正常工作吗?
使用 CentOS Stream 9 和 git 2.43.5
find ..
我知道当您由于“奇怪”的文件名而遇到将例如输出管道传输到的问题时,使用特定的分隔符(例如)来实际传递完整的文件名(例如)xargs
会有所帮助。并且,引用有问题的字符串以指定它们的边界“总是”有帮助的。\0
find foldername/ -type f -print0 | xargs -0 ...
但是,如果这些字符串(文件名)包含 bash 敏感字符'
(如,,,,,"
.. ?)并且您想使用一个字符串两次(即必须使用,并且需要在嵌套命令中注入这些字符串(即)?`
(
sh -c ..
$(CMD)
例如:
# create a file which should not exist but does
mkdir remove_afterwards
touch remove_afterwards/"some [\"strange\"] ('file')"
# this will work
find remove_afterwards/ -type f -print0 | xargs -0 -I{} sh -c 'echo "{}"'
# but this won't due to the nested command
find remove_afterwards/ -type f -print0 | xargs -0 -I{} sh -c 'echo "{}" $(stat -c "%s" "{}")'
stat: cannot statx 'remove_afterwards/some [strange] ('\''file'\'')': No such file or directory
remove_afterwards/some [strange] ('file')
我还没弄清楚如何逃离第二个{}
里面$()
。
有办法吗?
不可否认,一些具有功能的真实脚本会使这一切更容易编写和阅读,但我很好奇,历史上有这样一行代码值得努力去写这个问题。
我知道我可以输入 exit、logout 或点击Ctrl-D来正常注销。当服务器超时时,这些都不起作用,但幸运的是,我可以Enter-~-.退出会话。
但是,这会让我回到本地会话并退出所有跳转。我该如何退出当前 ssh 会话而不退出之前的跳转?
Debian 12 amd64 上的 KDE Plasma 5.27.11
我需要在工作站的电源管理睡眠和唤醒事件上通过 USB 发送一些非常短的信号(不是登录和注销,它们工作正常)。我为这些准备了单独的 bash 脚本,只是没有找到如何绑定它们的方法。我拥有机器的 root 访问权限,因此配置解决方案对我有用。如何做到这一点?
我的 Linux 发行版是 Debian 12.7.0,64 位,英文版。
我修改了标题为“如何在 Debian 12 上安装 Java JDK 21 或 OpenJDK 21”的指南 ,以便我可以“安装”/使用最新的生产就绪版本的 OpenJDK 23.0.1(仅供参考,Debian 的官方存储库包含 OpenJDK 17,对于我来说已经过时了。)
我点击链接https://download.java.net/java/GA/jdk23.0.1/c28985cbf10d4e648e4004050f8781aa/11/GPL/openjdk-23.0.1_linux-x64_bin.tar.gz将该软件下载到我的电脑。
接下来我使用以下命令解压缩文件:
tar xvf openjdk-23.0.1_linux-x64_bin.tar.gz
我的设备上创建了一个新目录。它名为jdk-23.0.1
我将该目录复制到/usr/local
sudo cp -r jdk-23.0.1 /usr/local
我通过发出以下命令创建了一个新的源脚本来设置 Java 环境:
su -i
tee -a /etc/profile.d/jdk23.0.1.sh<<EOF
> export JAVA_HOME=/usr/local/jdk-23.0.1
> export PATH=$PATH:$JAVA_HOME/bin
> EOF
完成上述操作后,我使用FeatherPad打开jdk23.0.1.sh,内容显示如下:
export JAVA_HOME=/usr/local/jdk-23.0.1
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/bin
根据指南,我输入了以下命令:
source /etc/profile.d/jdk23.0.1.sh
为了检查我的计算机上的 OpenJDK 版本,我输入了:
java --version
出现错误信息:
bash: java: command not found
有人能告诉我我做错了什么吗?谢谢。
PS:我非常仔细地遵循了上述指南,但仍然出现了错误消息。
编辑以更正拼写错误。正确的陈述应如下:
导出JAVA_HOME=/usr/local/jdk-23.0.1
我有一个容器,其中的 shell 运行 bash。它安装了 bash 补全功能,运行良好。此容器有许多自定义 cli 命令,但它们都必须以 开头nextcloud
。因此,如果我输入nex <tab>
nex,它就足够独特,可以完成。
有没有办法在新的 cli 行(空白)上设置“默认”完成,以便第一个选项卡注入该默认值,或者我可以在nextcloud
不使用选项卡的情况下进行注入。
我搜索了“bash 补全”和 bash 手册页以及 complete 的帮助。我尝试了 -D、-E,根据措辞,这似乎是可行的,但我不知道该怎么做。能帮点什么吗?
https://opensource.com/article/18/3/creating-bash-completion-script
https://linux.die.net/man/1/bash(搜索页面Completing
)
complete: complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]
Specify how arguments are to be completed by Readline.
For each NAME, specify how arguments are to be completed. If no options
are supplied, existing completion specifications are printed in a way that
allows them to be reused as input.
Options:
-p print existing completion specifications in a reusable format
-r remove a completion specification for each NAME, or, if no
NAMEs are supplied, all completion specifications
-D apply the completions and actions as the default for commands
without any specific completion defined
-E apply the completions and actions to "empty" commands --
completion attempted on a blank line
-I apply the completions and actions to the initial (usually the
command) word
When completion is attempted, the actions are applied in the order the
uppercase-letter options are listed above. If multiple options are supplied,
the -D option takes precedence over -E, and both take precedence over -I.
Exit Status:
Returns success unless an invalid option is supplied or an error occurs.
find . -type f
我们的一个用户在我们的一台服务器上发出了一条命令,在 中查看时该命令当前正在运行ps aux
。
我如何知道这个命令是从哪个目录发出的。
该过程是否具有类似当前工作目录的环境变量,我可以检索该变量来获取我想要的内容或类似的东西?
注意:上述命令是人为的,实际命令是其他内容。但是否可以找到发出该命令的目录
例如,假设您要复制这样的文件:
cp path/to/the/file.txt path/to/the/file.copy
写两次路径非常令人沮丧,所以有没有像这样带有特殊字符的路径:
cp path/to/the/file.txt :)file.copy
这将非常有用,特别是当你尝试diff
在同一个目录中创建两个文件时
我在这里缺少一些知识,也没有合适的语言来描述(抱歉)。这是我的命令,它只在找到“$WARN”中的匹配项时返回第一个实例
echo "$WARN"
(W) 2024-08-30T08:08:52 - Restart is required to toggle support
(W) 2024-08-30T09:59:30 - Failed to download RSS feed at 'https://aaa'. Reason: The connection to the remote server timed out
(W) 2024-08-30T10:00:30 - Failed to download RSS feed at 'https://bbb'. Reason: The connection to the remote server timed out
(W) 2024-08-30T10:00:30 - Failed to download RSS feed at 'https://ccc'. Reason: The connection to the remote server timed out
(W) 2024-09-13T08:59:44 - Failed to download RSS feed at 'http://xxx'. Reason: The remote server refused the connection
(W) 2024-09-13T08:59:44 - Failed to download RSS feed at 'http://yyy'. Reason: The remote server refused the connection
(W) 2024-09-13T08:59:44 - Failed to download RSS feed at 'http://zzz'. Reason: The remote server refused the connection
WARN=$(
if [[ "$WARN" == *Failed* ]]
then
printf '%s' "${WARN//''\'*''\'\./...}"
fi
)
echo "$WARN"
(W) 2024-08-30T08:08:52 - Restart is required to toggle support
(W) 2024-08-30T09:59:30 - Failed to download RSS feed at ... Reason: The connection to the remote server timed out
预期输出:唯一行和与“失败”匹配的行被修改以删除单引号内的所有内容,包括引号本身。
(W) 2024-08-30T08:08:52 - Restart is required to toggle support
(W) 2024-08-30T09:59:30 - Failed to download RSS feed at ... Reason: The connection to the remote server timed out
(W) 2024-09-13T08:59:44 - Failed to download RSS feed at ... Reason: The remote server refused the connection
实际输出:为什么省略了第二行的考虑,即只有包含的第一个匹配的行Failed
被执行并返回。
echo "$WARN"
(W) 2024-08-30T08:08:52 - Restart is required to toggle support
(W) 2024-08-30T09:59:30 - Failed to download RSS feed at ... Reason: The connection to the remote server timed out
如果我对输入进行排序,则将其反转,第二次匹配的出现Failed
会被省略。
echo "$WARN"
(W) 2024-09-13T08:59:44 - Failed to download RSS feed at ... Reason: The remote server refused the connection
(W) 2024-08-30T08:08:52 - Restart is required to toggle support
我不想匹配字符串的末尾。
我第二次创建变量 $WARN 时,用新内容替换它。
我正在按以下方式执行输出(带有附加参数--version
) :find
$ find NDK -name clang -executable -type f | xargs -I{} bash -c "exec {} --version"
Android (7714059, based on r416183c1) clang version 12.0.8
确实有效。不过,这种方法可能不是最优的。
有没有正确/最佳的方法来做到这一点?