我在 Windows 10 上使用 Cygwin,但也将 Ubuntu 与 WSL2 一起使用。我无法用后者重现这一点。当我输入man kill
cygwin 时,它说No manual entry for kill
. 当我输入 时man /bin/kill
,它似乎显示了正确的文件,但它夹在二进制乱码之间:
我该如何运行man
才能正确查看此页面?
对于上下文,我使用的是 zsh。每次我使用locate
时,我都想传递-i
和-A
标志。
通常,如果我能摆脱它,我会创建一个alias
与现有命令同名的命令来执行此操作。但是根据这个问题,别名不能接受参数,所以我必须改用函数。通常我停在那里,因为与命令同名的函数的想法对我来说是错误的,尽管我不能说为什么。
当我有这个想法时,我正要最终创建这样一个函数:这对我来说是一个常见的模式,想要为命令默认标志;有没有更简单的方法?也许 zsh 为这个问题提供了更好的解决方案?
这让我想到了另一个想法:覆盖现有命令是一种反模式吗?我一直这样做是因为它允许我跳过脑海中的关联:例如,“为什么没有ll
页面man
?哦,是的:ll
真的意味着ls -la
。我需要做man ls
,而不是man ll
。等等。”
总结一下:
我像这样运行updatedb:updatedb --localpaths="/a /b"
/a
是可移动驱动器。/b
是本地硬盘。尽管/a
我并不总是可以访问 ,但我经常想运行locate
以查找是否有某个文件(基于我上次运行的时间updatedb
)。
问题是,如果我updatedb
在未插入的情况下运行,则会收到错误消息:
/usr/bin/find: '/a': No such file or directory
数据库获取有关 的最新信息/b
,但会删除/a
的现有数据。有没有办法在没有插入/a
时保留数据?/a
updatedb
我认为这可能通过多个数据库实现,一个/a
用于/b
. /a
然后脚本可以在决定是否插入时检查是否插入updatedb
。
但是这两个命令的手册页都假设我知道的比我知道的多得多(例如,做什么FINDOPTIONS
),所以我希望有一个更简单的解决方案来解决这个问题。
我有一个问题,我想从find
命令中找到每条路径的长度。我的第一次尝试是运行这样的东西:
find . -exec sh -c "echo {} | wc -c" \;
我从这个答案中得到了这个想法。(上面的命令不是我的问题,我只是用它作为一个例子,它完全是人为的。另外,有时我可能需要多个管道。)
但是当我运行它时,输出中有错误,可能是由于输出路径中的特殊字符。不幸的是,我不知道哪些路径导致了问题,并且错误消息没有提供信息。不管...
find
命令直接执行命令。该命令(包括文件名参数)不会被 shell 或任何其他可能修改文件名的东西处理。这是非常安全的。
这似乎很方便。事实上,如此方便,以至于-exec sh -c ...
“治愈”似乎比疾病更糟糕。
所以我的问题是,当我需要使用管道命令find
并且我的路径可能包含特殊字符时,我该怎么办?这个问题是否有一个通用的解决方案,我不必考虑一堆警告?我正在使用 bash。
注意:这是一个类似的问题:如何最好地将 find + exec 命令的输出发送到管道?不同之处在于,我不一定要尝试将输出输出到-exec
. 即,如果find ... -exec ... foo {} | bar \;
是要走的路,那对我来说很好。我只是在寻找阻力最小的通用路径,命令的结构对我来说并不重要。
使用 bash,我正在运行:declare -p | grep 'declare -- '
打印整行。我想打印那些相同的行,但我想排除匹配本身。即,我可以... | grep pattern | sed 's/pattern//'
作为单个命令执行吗?这将与-o
选项相反。
我的命令输出这个:
...
declare -- MAX_CONNECTIONS_PER_SERVER="6"
declare -- OPTERR="1"
declare -- OSTYPE="linux-gnu"
...
但我想输出这个:
...
MAX_CONNECTIONS_PER_SERVER="6"
OPTERR="1"
OSTYPE="linux-gnu"
...
通常情况下,我只是将它传送到sed
,但巧合的是,我今天想这样做两次。我查看了手册页,但没有看到任何可以执行此操作的选项。
在匹配模式之后只返回一行的一部分是一个非常相似的问题。也许它甚至是重复的。有人可能会争辩说我的范围更窄一些:可以保证我正在抓取的模式和我正在删除的模式是相同的。我想删除x
. 问题要删除.*x
。
我正在编写一个脚本,在这种情况下,如果我能看到所有脚本定义的变量名称和值的转储,它真的会帮助我。这是一个例子:
foo="1"
bar="2"
print_script_variables
baz="3"
print_script_variables
这将输出:
foo="1"
bar="2"
foo="1"
bar="2"
baz="3"
类似的东西print_script_variables
存在吗?我觉得解析你正在执行的脚本是一件傻事。
如果这不存在,我只会手动输入一堆echo
命令。这有点烦人,因为我想在进行print_script_variables
故障排除时移动到放置的位置,而不必担心哪些变量会进入和超出范围。
这是一个 bash 脚本,但我在终端中使用 zsh,所以在这两种情况下都可以使用的东西是理想的。
我有一个结构如下的文件:
M: a
M: b
Player: c
M: d
Sequencer.Play( SpineAnimation(foo, speaker)@0 )
Player: e
M: f
Sequencer.Play( SpineAnimation(bar, speaker)@0 )
...
如何将其转换为这样的文件:
M: a
M: b
Player: c
M foo: d
Player: e
M bar: f
...
换句话说,如果下一行有Sequencer.Play( SpineAnimation(...
,我想把它后面的单词放在当前行的冒号之前。
不知道最好的工具是什么,我在想 awk,但话又说回来,我认为使用该工具会很麻烦。我愿意使用任何命令来完成此操作。我试图在这里做类似答案的事情:将两行合并为一个,从两者中选择选定的单词 但是这个问题似乎并不平凡,因为该Sequencer.Play
行并不总是存在。
我有这样的 JSON 数据:
[
{
"loginId": "7638749",
"customerprofileDetails": {
"securityQuestions": [
"What is your favorite sports team?",
"What is your favorite song?",
"Who is your favorite artist?"
]
}
}
]
我有一个脚本,我将该文件作为第一个参数传入。脚本如下所示:
for json in `cat $PWD/$1 | jq -cr '.[]'` ; do
echo "$json"
done
出于某种原因,当我运行此脚本时,它会输出以下内容:
> fileFromJson.sh tmp2.json
{"loginId":"7638749","customerprofileDetails":{"securityQuestions":["What
is
your
favorite
sports
team?","What
is
your
favorite
song?","Who
is
your
favorite
artist?"]}}
为什么那里有那些换行符,是什么导致了这个问题?当我刚刚运行时cat $PWD/tmp2.json | jq -cr '.[]'
,它会打印在一行上。如果这很重要,我正在使用 MacOS。
我有一个看起来像这样的文件:
[
{
"billingAccountNumber": "x",
"paymentResponseObject": {
"uiErrorDipslayMessage": "",
"transactionStatus": "S",
"transactionDescription": "",
"transactionCode": "",
"confirmationNumber": "1"
}
},
{
"billingAccountNumber": "y",
"paymentResponseObject": {
"uiErrorDipslayMessage": "",
"transactionStatus": "S",
"transactionDescription": "",
"transactionCode": "",
"confirmationNumber": "2"
}
},
{
"billingAccountNumber": "z",
"paymentResponseObject": {
"uiErrorDipslayMessage": "",
"transactionStatus": "S",
"transactionDescription": "",
"transactionCode": "",
"confirmationNumber": "3"
}
}
]
数据看起来并不完全像这样,而且我有三个以上的元素。根据这些数据,我想创建三个文件:x.json
、y.json
和z.json
. 我希望每个文件的内容都是paymentResponseObject
.
有没有办法做到这一点jq
?我已经想出了如何在 中执行此操作awk
,但它非常笨拙,我希望能够使用不同的模式重复此过程。我必须awk
为每个模式重写 80% 的脚本。