小编pyn*_*exj的帖子

bash_completion 的不同目录(自动完成指定目录下的子文件夹)

能够进入dev my-[tab]我系统上的任何地方并接收自动完成,例如

$ dev my-[tab]
my-project
my-awesome-project
Run Code Online (Sandbox Code Playgroud)

我创建了一个包含/etc/bash_completion.d/以下内容的文件:

_dev()
{
    PROJECTS=$(ls /development)
    local cur=${COMP_WORDS[COMP_CWORD]}

    COMPREPLY=( $(compgen -W "${PROJECTS}" -- $cur) )
}

complete -F _dev dev
Run Code Online (Sandbox Code Playgroud)

这工作得很好,但我也希望能够自动完成子文件夹:

[~] $ dev my-p[tab]
[~] $ dev my-project/[tab][tab]
src    doc
[~] $ dev my-project/s[tab][enter]
[/development/my-project/src] $
Run Code Online (Sandbox Code Playgroud)

所以基本上,我希望以devcd.

dev 只是一个别名:

alias dev='gotodev'
gotodev ()
{ 
    cd /development/$1
}
Run Code Online (Sandbox Code Playgroud)

bash-completion

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

在 pexpect 中同时使用 expect() 和 interact()

一般的问题是,我想使用 pexpect 调用需要 sudo 权限的脚本,但我并不总是想输入我的密码(只输入一次)。

我的计划是使用 pexpect 生成具有 sudo 权限的 bash 会话并从那里调用脚本。基本上我总是想让会话保持忙碌,每当一个脚本停止时,我想启动另一个。但是在脚本运行时,我希望用户拥有控制权。意义:

脚本应该在诸如 expect("root@") 之类的之后调用,因此只要会话空闲,它就会启动另一个脚本。当脚本运行时,interact() 让用户控制他想要提供的可能输入。

我的想法是使用不同的线程来解决这个问题。我的代码(用于概念验证)如下所示:

import pexpect
import threading

class BashInteractThread(threading.Thread):
    def __init__(self, process):
        threading.Thread.__init__(self)
        self.pproc = process

    def run(self):
        self.pproc.interact()


s = pexpect.spawn("/bin/bash", ['-i', '-c', "sudo bash"])

it = BashInteractThread(s)
it.start()

s.expect("root@")
s.sendline("cd ~")
while(s.isalive()):
    pass


s.close()
Run Code Online (Sandbox Code Playgroud)

当我调用这个脚本时,它没有给我任何输出,但这个过程似乎已经开始。尽管如此,我还是无法使用 CTRL-C 或 CTRL-D 来终止该进程——我必须单独终止该进程。我期望的行为是提示输入密码,然后它应该自动将目录更改为主目录。我不完全知道为什么它不起作用,但我想输出只会转发到交互()或期望()。

有没有人知道如何解决这个问题?提前致谢。

python-2.x pexpect

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

Jest 的 expect(value).toBeInstanceOf(Class) 失败了 expect(util.promisify(...)()).toBeInstanceOf(Promise) 等

设置:

  • 开玩笑: 21.2.1
  • 节点: 10.16.3
  • npm: 6.9.0

为什么 Jest 的 expect 不能将 node.js 的 util.promisify 返回的承诺识别为 Promise 的实例?

以下失败:

const util = require('util');

const fn = util.promisify((opts, cb) => cb(null, {})); 
const promise = fn();
expect(promise).toBeInstanceOf(Promise)
Run Code Online (Sandbox Code Playgroud)

同样,以下失败:

const util = require('util');

const fn = util.promisify((opts, cb) => cb(null, {}));
const promise = fn();
expect(promise.then).toBeInstanceOf(Function);
Run Code Online (Sandbox Code Playgroud)

可以通过检查typeof promise.then“功能”来规避这个问题,但我对这种行为的原因很感兴趣。

非常感谢您提供的信息!

node.js jestjs

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

如何自动完成特定目录下的文件?

我创建了一个命令memo如下:

memo() {
  vi $HOME/memo/$1
}
Run Code Online (Sandbox Code Playgroud)

我想将 bash-completion 应用到我memo要打开的目录中的$HOME/memo文件:

$ memo [TAB] # to show files in $HOME/memo
Run Code Online (Sandbox Code Playgroud)

$HOME/memo包含目录,因此列出其下的文件memo是不够的。换句话说,我想将ls命令中使用的内容应用$HOME/memomemo

$ ls [TAB]
foo.md bar/
Run Code Online (Sandbox Code Playgroud)

我尝试了以下但它不适用于嵌套目录:

_memo() {
    local cur
    local files
    _get_comp_words_by_ref -n : cur
    files=$(ls $MEMODIR)
    COMPREPLY=( $(compgen -W "${files}" -- "${cur}") )
}
complete -F _memo memo
Run Code Online (Sandbox Code Playgroud)

MEMODIR=$HOME/memo

bash bash-completion

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

理解大括号对重定向的影响 ("> file1 >& file2" vs. "{ > file1; } >& file2")

请考虑以下 bash 脚本:

#!/bin/bash

touch ./temp

set -C

>./temp &>/dev/null      # Visible error message output ("./test7: line 7: ./temp: cannot overwrite existing file")

{ >./temp; } &>/dev/null # No error message
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么由倒数第二行中的重定向导致的错误消息没有被尾随抑制&>/dev/null,而它在最后一行中按预期工作?

我研究了 bash 手册中有关重定向和复合命令的段落(特别是有关组命令的部分),但无法从中做出解释。毕竟,由于花括号中只有一个命令,离开花括号应该不会改变任何东西,不是吗?差异是否与 bash 解析行的顺序有关?

bash io-redirection

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

调试神秘的git+ssh+proxy失败“bash:没有这样的文件或目录”的艰难方法

我正在尝试通过 SOCKS5 代理克隆 github 存储库。在~/.ssh/config我有:

Host github.com *.github.com
    ProxyCommand /usr/bin/nc -X 5 -x 127.0.0.1:7070 %h %p
Run Code Online (Sandbox Code Playgroud)

git clone失败并出现错误bash: No such file or directory

$ git clone git@github.com:aureliojargas/sedsed.git
Cloning into 'sedsed'...
bash: No such file or directory
kex_exchange_identification: Connection closed by remote host
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
Run Code Online (Sandbox Code Playgroud)

我手动尝试了该ssh命令,但也失败了:

$ ssh -v git@github.com
OpenSSH_8.1p1, LibreSSL 2.7.3
debug1: Reading configuration …
Run Code Online (Sandbox Code Playgroud)

c ssh bash exec

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

期望 - expect_user的不同超时和期望?

我希望有一个无限(或非常大)的超时expect_user和默认超时expect.有没有办法设置不同的超时?或者我只需要在每次使用更改之前手动执行此操作?

expect

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

TCP套接字:当select()表示有可用数据时,read()仍然可以使用EINTR失败吗?

select()用于read()TCP套接字的非阻塞.当select()表示有用于读取数据我不知道我是否还需要处理EINTRread().

c sockets kernel network-programming tcp

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

可移植的 sed 方法来查找字符串的最长公共前缀

bash 中两个字符串的最长公共前缀sed中的解决方案仅适用于 GNU 。我想要一个更便携的解决方案(例如对于 BSD/macOS 、 Busybox )。sedsedsedsed

sed

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

如何使用 CLI bq 命令创建一次性数据集副本(无计划重复)

我想使用 bash 脚本在 BigQuery 中制作一次性数据集复制,从source_dataset_Atarget_dataset_B

这个操作在BigQuery Console中很容易完成,就像这样 在此输入图像描述

但是,如果我bq mk --transfer_config像下面那样使用,它将创建一个具有定期计划(“每 24 小时”)的数据集复制传输作业。

bq mk --transfer_config --project_id=data-project --data_source=cross_region_copy \
  --display_name='one-time-dataset-copy' \
  --target_dataset=target_dataset_B \
  --params='{"source_dataset_id":"source_dataset_A","source_project_id":"source_project","overwrite_destination_table":"true"}' \
Run Code Online (Sandbox Code Playgroud)

如何在 BigQuery 中进行一次性数据集复制?

google-bigquery

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