标签: bash

删除 Bash 中的前一个标点符号

在 Bash 中,Ctrl + W 将删除最后一个单词。Bash 认为单词是由空格分隔的。

这意味着,如果光标位于字符串“cd /dir1/dir2/dir3”的末尾,并且按下 Ctrl + W,您将留下“cd”。

是否有一个 Bash 快捷方式(可以自定义)让我留下“cd /dir1/dir2/”?

keyboard-shortcuts bash command-line

6
推荐指数
1
解决办法
614
查看次数

找不到/Users/user/tomcat/bin/setclasspath.sh

运行该程序需要该文件。我是 Mac OS X 及其终端的新手。

我正在安装 Apache Tomcat,使用通过此 URL 提供的步骤http://www.editrocket.com/articles/tomcat_mac.html,但是当我运行时

sh startup.sh
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Cannot find /Users/user/tomcat/bin/setclasspath.sh
 This file is needed to run this program. 
Run Code Online (Sandbox Code Playgroud)

setclasspath.sh该位置已存在。

terminal bash tomcat macos

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

如何在同一屏幕会话中自动启动新窗口?

我读过如何自动启动多个屏幕会话?,但我不明白第一个接受的回复:

screen -dmS "$SESSION_NAME" "$COMMAND" "$ARGUMENTS"
Run Code Online (Sandbox Code Playgroud)

就我而言,我需要为一个脚本自动创建一个屏幕会话,然后我需要在同一会话中为另一个脚本创建一个新窗口。手动地,我会:

  1. 运行画面
  2. 输入命令
  3. CTRL+A
  4. CTRL+C
  5. 输入命令
  6. CTRL+A
  7. CTRL+D

如何在脚本中自动执行此操作?一个简单的例子会对我有很大帮助。

谢谢您的回复。

debian display bash gnu-screen

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

有没有办法从“ls -l”中消除所有者和组?

我从来不需要查看用ls -l(实际上,ls -laF)列出的文件的所有者和组,并且想知道是否有办法从输出中删除它们。所以我想改变这一点:

lrwxr-xr-x  1 chuck  staff  45 Jul  2 23:29 directory@ -> /Users/chuck/Projects/directory
Run Code Online (Sandbox Code Playgroud)

进入这个:

lrwxr-xr-x  1 45 Jul  2 23:29 directory@ -> /Users/chuck/Projects/directory
Run Code Online (Sandbox Code Playgroud)

我在 OS X 下使用 bash,但我假设答案适用于任何 Unix-y 操作系统,例如运行我的 Web 服务器的 Debian 机器。

bash command-line macos

6
推荐指数
1
解决办法
1630
查看次数

Bash:比 tee 更好的输出到控制台和输出文件的方法?

我需要显示的是定期刷新的日志。这是一个大约 10 行文本的块。我正在使用 |tee,它现在可以工作。然而,表现却不太令人满意。它等待一段时间,然后从多次刷新中输出几块文本(特别是当程序刚刚启动时,需要相当长的时间才能开始在控制台上显示任何内容,我第一次看到这个时,我以为程序挂了)。另外,它在最后一个块的中间随机断裂,因此呈现起来相当难看。

有没有办法改善这一点?(也许每次输出更少,并更频繁地在输出文件和控制台之间切换?)

更新:这是我的 bash 脚本中的内容: tail -f /var/log/syslog | egrep --line-buffered "my search string" > tmp.txt & python script.py | tee result.log

linux bash command-line bash-scripting

6
推荐指数
1
解决办法
7739
查看次数

从 wget --content-disposition 获取文件名

在 bash 脚本内部,我动态下载一个文件,因此我用它wget --content-disposition来确保文件名正确,但是我将如何检索wget保存它的文件的名称?

bash wget shell-script

6
推荐指数
1
解决办法
8813
查看次数

Cygwin 粘贴长行在换行点插入换行符

我在全新安装时遇到了 Cygwin 复制/粘贴功能的问题。

如果我将 cygwin 窗口缩小,然后键入比实际更宽的命令(例如echo testestsetsetestestsetsetsetsetsetsetsetset)并按 Enter 键,该命令将成功执行。

如果我然后从 cygwin 窗口复制该命令并将其粘贴到 Notepad++ 中,则该命令在窗口中换行的位置有一个换行符。这在实践中意味着,如果我再次将该命令粘贴到 cygwin 中,它会认为这是两个命令,这是不正确的。

我怎样才能让 cygwin 不在换行符中写入换行符(顺便说一句,我的旧安装没有这个问题。新的 cygwin/windows 10/一些错误的设置导致了这个问题)。

cygwin bash command-line windows-10

6
推荐指数
1
解决办法
1968
查看次数

从一个 shell 脚本导入另一个 shell 脚本中的变量而不执行引用的 shell 脚本

我有 2 个 shell 脚本,file1.sh 和 file2.sh

文件1.sh

#!/usr/bin/env bash 
export var1="/data/share"
export var2='password'
echo "Hello"
Run Code Online (Sandbox Code Playgroud)

文件2.sh

#!/usr/bin/env bash 
source file1.sh
echo $var1
echo $var2
Run Code Online (Sandbox Code Playgroud)

当我执行 file2.sh 时,我得到以下输出

Hello
/data/share
password
Run Code Online (Sandbox Code Playgroud)

但我的预期输出是

/data/share
password
Run Code Online (Sandbox Code Playgroud)

file1.sh 在 file2.sh 中引用时被执行。如何在 file2.sh 中单独导入变量而不执行 file1.sh?

linux bash shell command-line shell-script

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

编写 bash 函数时出现意外标记“(”附近的语法错误

我有

testapi() { docker-compose -f /home/me/projects/api/docker-compose.yml run -e "API_BRANCH=${1-master}" --rm api_test ;}
Run Code Online (Sandbox Code Playgroud)

它会导致错误:

$ src
bash: /home/me/.bash_profile: line 56: syntax error near unexpected token `('
bash: /home/me/.bash_profile: line 56: `testapi() { docker-compose -f /home/me/projects/api/docker-compose.yml run -e "API_BRANCH=${1-master}" --rm api_test ;}'
Run Code Online (Sandbox Code Playgroud)

运行会产生帮助消息:

$ testapi
Run a one-off command on a service.

For example:

    $ docker-compose run web python manage.py shell
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏,ty

linux bash ubuntu docker

6
推荐指数
1
解决办法
4340
查看次数

在脚本中设置“LANG=C LC_ALL=C”对 printf 中非英文字符的填充长度没有影响

我正在将 Bash 脚本的输出格式化为表格,以便用于表示每列边界的管道字符相对于该列中最长的字符串间隔开(从而很好地排列所有管道字符)。

下面是相关的输出位。请注意“il2”和“ksp”行的两个管道字符如何对齐,但是在包含非英文字符“ý”的“iceland”行中,第二个管道字符向左缩进一个空格到其他行。

iceland          | Mýrdalssandur Iceland                    | steam://rungameid/1248990                                                                   | iceland-Win64-Shipping.exe
il2              | IL 2 Sturmovik: 1946                      | steam://rungameid/15320                                                                     | il2fb.exe
ksp              | Kerbal Space Program                      | steam://rungameid/220200                                                                    | KSP_x64.exe
Run Code Online (Sandbox Code Playgroud)

在脚本的最开始,我有以下内容:

oLang=$LANG oLcAll=$LC_ALL
LANG=C LC_ALL=C
Run Code Online (Sandbox Code Playgroud)

最后,就在最后的“完成”声明之前,我有:

LANG=$oLang LC_ALL=$oLcAll
Run Code Online (Sandbox Code Playgroud)

整个脚本中没有其他语言设置更改。

如果在 shell 中我将一个$string变量设置为 "Mýrdalssandur Iceland" 并运行printf "%-14s is %2d char length\n" "'$string'" ${#string},我得到的字符长度为 21,但是当我运行LANG=C LC_ALL=C和 then 时printf "%-14s is %2d char length\n" "'$string'" ${#string},我得到的字符长度为 22,这表明它实际上应该有所作为。

我创建了一个准系统脚本来测试填充,在该脚本中,更改LANG确实具有预期的效果,即使这些printf行包含在函数中,就像它们在相关的主脚本中一样。

在这一点上,我不知道为什么输出没有应用语言更改,因此感谢任何帮助。

这是完整的脚本: …

linux language bash text-formatting

6
推荐指数
1
解决办法
667
查看次数