标签: bash

如何访问 Windows 上区分大小写的路径(使用 Bash-on-Ubuntu-on-Windows 创建)?

Bash-on-Ubuntu-on-Windows 支持区分大小写的文件路径。这意味着我可以创建两个名称仅大小写不同的文件或目录。但是,我在访问这些文件时遇到问题。

跑步

bash -c "touch Magic ; mkdir magic ; echo Secret! > magic/secret"
Run Code Online (Sandbox Code Playgroud)

在该目录中创建一个文件名Magic、一个名为的目录magic和一个文件名secret

bash -c "ls -lR" 产量

.:
total 0
drwxrwxrwx 2 root root 0 Aug 23 10:37 magic
-rwxrwxrwx 1 root root 0 Aug 23 10:37 Magic

./magic:
total 0
-rwxrwxrwx 1 root root 8 Aug 23 10:37 secret
Run Code Online (Sandbox Code Playgroud)

(我不确定为什么会得到root,因为它不是默认用户,但这似乎与我的问题无关。)

Windows 资源管理器显示: Windows 资源管理器显示文件和目录

现在,虽然bash可以轻松访问magic/secret目录中的文件,但 Windows 似乎将目录和文件视为一回事。所以双击目录我得到一个“目录名无效”的错误 dbl 单击目录时出错

使用 也是如此cd,因为我被The directory name is …

bash windows-explorer filesystems windows-10 windows-subsystem-for-linux

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

如何取消反向搜索而不丢失输入的文本?

在终端中使用反向搜索 ( Ctrl- r) 时bash,我可以使用Ctrl-cCtrl-取消搜索g。这两个选项都将清除搜索时键入的文本。

然而,我需要取消搜索的最常见原因是当我意识到我想要输入的命令不在我的历史记录中时,这通常只有在我输入了很长的命令后才会发生。

有什么方法可以干净地中止搜索而不会丢失我输入的所有内容?

linux bash command-line

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

带有 !(pattern-list) 的 SSH 远程命令

我正在尝试使用 SSH 从远程主机中删除/path/to/dir/除两个目录 (dir1dir2)之外的所有文件和目录。当我在本地 Ubuntu 14.04 机器上运行与此类似的命令时,它按预期工作:

user@host1:~$ cd /path/to/dir/ && rm -rf !(dir1|dir2)
Run Code Online (Sandbox Code Playgroud)

如果我尝试在具有相同目录结构的另一台主机上通过 SSH 执行相同的命令,则会失败。

user@host1:~$ ssh user@host2 'cd /path/to/dir/ && rm -rf !(dir1|dir2)'
bash: -c: line 0: syntax error near unexpected token `('
bash: -c: line 0: `cd /path/to/dir/ && rm -rf !(dir1|dir2)'
Run Code Online (Sandbox Code Playgroud)

我应该如何转义命令以使其工作?我认为使用单引号就足够了。

linux ssh bash

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

如何通过 SSH 使用 sudo 更改 root 密码?

我正在尝试通过 SSH 重置 root 密码,使用 sudo,因为直接以 root 身份登录被禁用。

我正在使用以下命令重置密码:

sshpass -f .pass ssh kj@server2 'bash -s' < password.sh
Run Code Online (Sandbox Code Playgroud)

运行此程序时,系统提示我输入 sudo 密码,但失败了。

password.sh有以下内容。

MYPASS=abcd@123

echo $MYPASS | sudo -kS bash -c 'echo passwd | passwd root --stdin'
Run Code Online (Sandbox Code Playgroud)

如何使用 SSH 和 sudo 成功重置密码?

linux ssh sudo bash

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

tr 中的补充选项

我无法理解与替换模式一起使用的命令中的complement(-c) 选项tr(即没有任何其他选项),例如:

回声 "a" | 驾驶室

为什么会产生:

AB根@斯莱克

ab没有换行符的字符串)?

linux bash shell

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

拉链放气百分比

使用zip archive file我得到:

adding: file (deflated 40%)

-rw-rw-r-- 1 lenduya lenduya 757 Jan 18 16:26 archive.zip
-rw-rw-r-- 1 lenduya lenduya 973 Jan 18 16:25 file
Run Code Online (Sandbox Code Playgroud)

问题是我不确定它是如何获得 40% 的。973/757 是 1.28,757/973 是 0.77。757/(973-757) 是 3.5,973/(973/757) 是 4.5。

奖励:目标是脚本的参数是一个文件。我必须打印以输出zip. 我的思考过程是,我将使用 的摘要,将其zip输出到文件中,然后我将使用cut或过滤掉所需的信息trbc将处理浮动格式。我是在一条好的道路上还是有更简单的方法?

zip bash

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

linux中envsubst的windows等价物是什么

我使用 envsubst 将环境变量替换为 linux 中的文件。

envsubst < task-definition.json > new-task-definition.json
Run Code Online (Sandbox Code Playgroud)

如何使用默认资源或使用 3rd 方工具在 Windows 中实现此功能?

windows bash shell environment-variables

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

为什么你不能 sudo 历史?

如果我想查看 root 的 bash 历史记录,为什么我不能直接运行sudo history?当我这样做时,它说找不到命令历史记录,但是如果我在没有 sudo 的情况下运行它,它运行良好。

编辑:这是一个重复的答案,但不是链接的重复问题。提出任何一个问题的人都不知道它是一个 shell 内置命令,而不是一个二进制命令。

linux sudo bash history command-history

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

在特定字符串之前将文本文件的内容添加到其他文本文件的中间

我正在尝试将文本文件的内容添加到其他文本文件的中间,也就是在特定字符串之前。我使用以下命令在特殊字符串后添加文本,例如

sed '/line3/ r data.txt' file1.txt (this will add contents of data.txt to file1.txt after "line3" string.

我试图在特定字符串之前添加文件的内容。我不能保证行号,所以我不能使用那个方法。

例如,

    <xa-datasource-property
 name="URL">jdbc:oracle:thin:@domain.com:1521:ora12121</xa-datasource-
property>
    <xa-datasource-property name="User">username</xa-datasource-property>
    <xa-datasource-property name="Password">password</xa-datasource-property>
    <!-- Uncomment the following if you are using Oracle 9i
    <xa-datasource-property name="oracle.jdbc.V8Compatible">true</xa-
datasource-property>
   -->
    <exception-sorter-class-name>
        org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter
    </exception-sorter-class-name>
  </xa-datasource>
Run Code Online (Sandbox Code Playgroud)

我想在</xa-datasource>字符串之前添加 data.txt 的内容 。

bash sed shell-script

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

Windows 命令提示符一步捕获 bash 脚本的输出

我有一个 bash 脚本 postCloneSetup.sh:

script_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P )
cd "$script_path"

printf 'Updating submodules for project\r\n'
git submodule update --init --recursive

printf '\r\nInitializing git hooks\n'
./GitHooks-BackEnd/init-hooks

printf '\r\nInitializing Submodule1\r\n'
$(./Submodule1/postCloneSetup.sh)

printf '\r\nInitializing Submodule2\r\n'
$(./Submodule2/postCloneSetup.sh)
Run Code Online (Sandbox Code Playgroud)

我从 Windows 命令提示符触发了一个 bash 脚本。

postCloneSetup.sh
Run Code Online (Sandbox Code Playgroud)

它打开另一个窗口,然后返回。它产生的窗口保持打开状态并记录输出文本。

在此处输入图片说明

我想从生成的窗口中捕获输出(写入控制台的文本)并将其返回到 Windows 命令提示符。

我更喜欢使用类似的东西

$(postCloneSetup.sh) // Linux for capturing output to current context
Run Code Online (Sandbox Code Playgroud)

对于 Windows 命令提示符。

我不想修改 postCloneSetup.sh。我知道我可以把它写到一个文件中

exec &> postCloneSetupLog.log
Run Code Online (Sandbox Code Playgroud)

但是我必须等待并手动运行

type postCloneSetupLog.log
Run Code Online (Sandbox Code Playgroud)

在控制台中查看输出。这对于集成到 CI 引擎是不可能的,这是我的目标。

如何在一个命令中捕获生成的控制台的输出?

windows linux bash shell command-line

5
推荐指数
2
解决办法
3017
查看次数