考虑这样的工具watch可以接受另一个命令(例如ls -l),如下所示:
watch ls -l
# or equivalently
watch 'ls -l'
Run Code Online (Sandbox Code Playgroud)
如果命令更复杂,那么如果当前 shell 或 get 解释诸如$variable、*、|或;之类的内容,那么一切都与引用/转义有关。这两个命令是不同的:&&watch
watch echo "$$"
watch 'echo "$$"'
Run Code Online (Sandbox Code Playgroud)
这些也是:
watch date ; echo done
watch date \; echo done
Run Code Online (Sandbox Code Playgroud)
ssh类似,它可以接受一个或多个参数并构建一个要在服务器上运行的命令。如果本地 shell 解释等,或者远程 shell 则$variable取决于引用/转义。|
有些命令sh -c需要包含代码的单个参数,但引用/转义的需求是相似的。事实上watch(或ssh) 为sh -c或类似的命令构建了这个单一参数。
我已经有了想要提供给或或类似工具的确切命令。命令是从历史记录中获取的,或者粘贴到命令行中或者键入,就像要直接执行一样;它逐字在我的命令行中。在使用类似工具之前,不应扩展或解释命令中的任何内容。如果是这样,则意味着所有扩展和解释都应该稍后定期进行。如果是这样,则意味着它应该发生在服务器上。watchsshwatchwatchssh …
您能解释一下 shebang #!/bin/sh -x 中“x”的含义吗?
这行有必要加“-x”吗?
我的日志有问题journalctl,它没有显示超过一小时的日志。
第一个日志条目大约是一小时前,而不是要求的 2 天前。
$ date -u
Wed May 13 08:59:21 UTC 2020
$ sudo journalctl --utc --since="2 days ago" -n 1 --no-pager -u datalake-profile-table-error-worker@1.service
-- Logs begin at Tue 2020-03-17 17:30:22 UTC, end at Wed 2020-05-13 09:00:10 UTC. --
May 13 08:11:03 <log content>
Run Code Online (Sandbox Code Playgroud)
服务已于 5 天前开通:
$ sudo systemctl status datalake-profile-table-error-worker@1.service
...
Active: active (running) since Thu 2020-05-07 15:45:47 CEST; 5 days ago
...
Run Code Online (Sandbox Code Playgroud)
jorunalctd.conf不过看起来并不可疑:
$ cat /etc/systemd/journald.conf
# This file is part of systemd. …Run Code Online (Sandbox Code Playgroud) 我想将 git bash 集成到 IntelliJ 中,因此我将默认终端路径更改为C:\Program Files\Git\bin\sh.exe. 一段时间后,我注意到有些命令不起作用,例如:
sh.exe
$ ll
bash: ll: command not found
Run Code Online (Sandbox Code Playgroud)
还有一些程序无法运行。我正在使用MQTT CLI,下载了它,PATH正确配置了变量,但该命令mqtt仅在git-bash.exe.
sh.exe
$ mqtt
bash: mqtt: command not found
Run Code Online (Sandbox Code Playgroud)
git-bash.exe
$ mqtt
Usage: mqtt [-hV] { pub | sub | shell }
MQTT Command Line Interpreter.
Options:
-h, --help Show this help message and exit.
-V, --version Print version information and exit.
Commands:
pub, publish Publish a message to a list of topics …Run Code Online (Sandbox Code Playgroud) .bashrc我在通过 SSH 远程登录到服务器时正在试验我的文件。我无意中留下了一个exit,导致所有后续登录立即断开连接。我实际上被锁在门外了。我能够在具有 root 权限的人的干预下恢复访问权限,但是如果没有其他人的帮助,这可能吗?
我尝试做诸如运行ssh <server> 'bash --norc --noprofile'和 之类的事情ssh <server> 'mv .bashrc bashrc-backup',甚至尝试用 强制覆盖它scp empty-file <server>:.bashrc。然而,所有这些选项似乎都依赖于.bashrc在运行命令之前首先找到损坏的源,因此它们都不起作用。
很可能这种情况是没有办法摆脱的。但这是设计使然吗?为什么很容易将自己锁定在系统之外,例如仅通过运行,是否有原因ssh <server> 'echo exit > .bashrc'?有没有办法减少这种错误?
假设我的 ZSH 配置文件中有以下别名定义:
alias myalias="cd /"
Run Code Online (Sandbox Code Playgroud)
如何myalias在另一个别名中使用?IE:
alias myaliasone="myalias && cd /usr"
Run Code Online (Sandbox Code Playgroud)
我已经尝试过(使用真正的别名,这个别名只是为了示例目的而伪造的),但没有任何反应,而且我无法根据调试或修复某些内容看到任何错误,有什么想法吗?如果这是在另一个别名中使用别名的正确方法,您知道我如何调试它以便找到根本问题或发生了什么吗?
我知道我可以在当前会话中export PATH="$PATH:my_path"添加PATH变量。
我还知道我可以添加此行以~/.bash_profile使其在用户的会话中持续存在:
echo 'PATH="$PATH:my_path"' >> ~/.bash_profile
我还知道在 Linux 中ubuntu我可以添加该行/etc/bash.bashrc,并且它始终可供所有用户使用。
但是,我的 linux 在容器内alpine,我不知道在哪里添加该文件。我在谷歌中找不到它。
在 macOS 上使用 read 时,我观察到 zsh 和 bash 之间的差异。
使用 bash 这个脚本
echo "characters" | while IFS= read -d '' -n 1 a; do printf %s "$a-"; done
Run Code Online (Sandbox Code Playgroud)
生产
c-h-a-r-a-c-t-e-r-s-
Run Code Online (Sandbox Code Playgroud)
而在 zsh 上我没有输出,也没有错误是否可以使用 read 逐个字符地迭代?
我想将条件表达式的结果存储在环境变量中。
我试过:
C=$([ "$A" = "$B" ])
Run Code Online (Sandbox Code Playgroud)
但运行后的值为$C空字符串。
我当然可以做这样的事情:
if [ "$A" = "$B" ]
then
C=1
else
C=0
fi
Run Code Online (Sandbox Code Playgroud)
但我确信有更好的方法。
我正在测试一个脚本,想创建一个包含一些文本的小文件,所以我输入了以下内容,但忘记对文件名中的空格进行转义:
echo "bob">other name
Run Code Online (Sandbox Code Playgroud)
当我这样做时ls,它显示了文件“其他”,当我这样做时cat other,它显示的内容为:
bob name
Run Code Online (Sandbox Code Playgroud)
“名称”是如何出现在文件中的?我相信我在某处看到您可以在命令中的任何位置放置重定向。事实上,我刚刚测试了这个:
echo >other Some text in a file
Run Code Online (Sandbox Code Playgroud)
“文件中的某些文本”是“其他”的内容。
此功能的目的是什么?
当然,最初,我应该输入:
echo "bob">other\ name
Run Code Online (Sandbox Code Playgroud)