相关疑难解决方法(0)

如何使用`find`命令自动转义shell元字符?

我在目录树下有一堆 XML 文件,我想将它们移动到同一目录树中具有相同名称的相应文件夹。

这是示例结构(在外壳中):

touch foo.xml bar.xml "[ foo ].xml" "( bar ).xml"
mkdir -p foo bar "foo/[ foo ]" "bar/( bar )"
Run Code Online (Sandbox Code Playgroud)

所以我的方法是:

find . -name "*.xml" -exec sh -c '
  DST=$(
    find . -type d -name "$(basename "{}" .xml)" -print -quit
  )
  [ -d "$DST" ] && mv -v "{}" "$DST/"' ';'
Run Code Online (Sandbox Code Playgroud)

这给出了以下输出:

‘./( bar ).xml’ -> ‘./bar/( bar )/( bar ).xml’
mv: ‘./bar/( bar )/( bar ).xml’ and ‘./bar/( bar )/( bar ).xml’ are the same file …
Run Code Online (Sandbox Code Playgroud)

find shell-script quoting wildcards

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

如何将 stty lnext 重新绑定到 ^q?

您可以使用

tty 驱动程序中的“lnext”功能(默认情况下通常为 ^V)

但是,我将Ctrl+绑定v到终端模拟器中的“粘贴”。(因为我不使用控制流)我想重新绑定lnextCtrl+ q。我尝试了以下~/.zshrc

setopt noflowcontrol  # Don't use ^s and ^q for control flow
bindkey -r "^Q"       # Unbind ^q from push-line
stty lnext '^Q'       # Bind ^q to lnext
Run Code Online (Sandbox Code Playgroud)

但是,它似乎不起作用。有没有办法重新绑定lnextCtrl+ q

编辑

我已经做了更多的故障排除,似乎无法重新绑定其他 stty 键。我删除setopt noflowcontrol进行测试,然后尝试stty start '^A'stty start '^B'。两者都没有任何影响;start仍然绑定到Ctrl+ q。(FWIW 我尝试了文字^Aor^Blnext前面的字符本身。)

zsh stty

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

如何设置包含换行符的环境变量?

我正在尝试将 RSA 密钥设置为环境变量,它作为文本文件包含换行符。

每当我尝试从文件中读取并将其传递给环境变量时,它只会停在第一行的换行符处。我怎样才能防止这种情况?

linux string variable

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

tcsh 在命令替换中保留换行符 `...`

所以,我写了一个简单的脚本来将sh-styleexport key=value语句转换为csh-style setenv key valuefor docker-machine env

#!/bin/sh
docker-machine env | sed -e 's/export/setenv/' -e 's/=/ /' -e '$d'
echo '# eval `docker-machine env`'
Run Code Online (Sandbox Code Playgroud)

它产生以下输出

setenv DOCKER_TLS_VERIFY "1"
setenv DOCKER_HOST "tcp://<ipv4 address>:<port>"
setenv DOCKER_CERT_PATH "<HOME>/.docker/machine/machines/default"
setenv DOCKER_MACHINE_NAME "default"
# Run this command to configure your shell:
# eval `docker-machine env`
Run Code Online (Sandbox Code Playgroud)

在 my 中,.tcshrc我已将此脚本绑定到 alias docker-machine-env-csh

我可以使用临时变量来获取这个脚本的输出就好了

% docker-machine-env-csh >! /tmp/csh && source /tmp/csh
Run Code Online (Sandbox Code Playgroud)

但是,我似乎无法直接eval得到这个别名的结果

% eval `docker-machine-env-csh`
setenv: …
Run Code Online (Sandbox Code Playgroud)

tcsh command-substitution

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

Bash 选项使命令替换保留尾随换行符

我希望它bash带有一个选项,可以阻止命令替换剥离尾随换行符。有没有?如果没有,那么是否存在类似的外壳bash,并且标准\xe2\x80\x94POSIX,我猜\xe2\x80\x94sh代码将在其中运行,它有这样的选项或者可能有一些特殊的语法对于不去除换行符的命令替换(后者更好)?

\n

shell bash command-substitution

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

"FILENAME=$(echo $INFILE | grep -oE "[^/]+$") 是什么意思?

FILENAME=$(echo /root/Source/code/script.sh | grep -oE "[^/]+$")
Run Code Online (Sandbox Code Playgroud)

我知道它会给我文件路径中的文件名作为script.sh. 但是有人可以向我解释一下吗?

linux shell scripting shell-script

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