AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-474559

Nickotine's questions

Martin Hope
Nickotine
Asked: 2024-07-09 03:41:49 +0800 CST

如果前一个命令失败并返回代码 0,如何执行命令

  • 5

我有一个登录服务器的脚本。无论是否成功(即密码是否有效),脚本都会以返回代码 0 退出,并显示以下文本:

Error login failed.

如果发生这种情况,我希望通过运行另一个命令来重试登录,但由于返回代码,我无法做到。

如果我将输出通过管道传输到 grep 以获取“错误”,以便我可以基于此执行命令,那么登录对话框就不会显示在终端中。

有没有办法解决?

这是用于工作的伪代码:

loginCmd && echo "$?"
username:
password:

Error login failed. 
0

更新

我尝试使用评论员的想法,但我无法捕捉带有“错误”的文本,因为该行出现在命令完成后......

密码错误时,实际情况如下:

agent registration
username: xyz
password:

Error login failed.

我尝试过这个:

result=$(loginCmd | tee /dev/tty)

grep -q 'Error' <<< "$result" && 
    loginCmd

错误字符串在命令完成后输出,因此result不会捕获它:

result=agent registration

所以我猜没有办法捕获这个字符串?

Error login failed.

有任何想法吗?

理想情况下,登录失败时脚本会返回 1,或者具有某种重试机制,但事实并非如此,而且我无法更改这一点,这是一个公司脚本,它只会影响终端,而不会影响客户使用的 GUI。

bash
  • 2 个回答
  • 112 Views
Martin Hope
Nickotine
Asked: 2024-02-29 08:18:18 +0800 CST

如何让 GNU 并行命令获取在其外部定义的变量?

  • 4

我的实际情况更复杂,但这就是我遇到的问题。

简化示例

echoSimultaneously.bash:

echoSimultaneously() {
    parallel -j 0 echo ::: $string
}

run() {
    local IFS string

    # split on new lines not on white space
    # don't have to quote vars/everything
    IFS=$'\n'
    string=$@

    echoSimultaneously $string
}

export -f echoSimultaneously

函数 run 将由另一个脚本调用,在这个脚本被它获取后,例如另一个脚本会执行:run {1..10},我可以调用run这个脚本,但这不是我做事的方式。

问题:

  • 这些变量IFS不会被as启动它自己的 shell 或实例string所拾取,因此它们不在范围内。echoSimultaneouslyparallel
  • 对变量进行export操作也不起作用。

请不要对未引用的变量迂腐,只关注问题,我很清楚可能会出错的事情。

示例,尽管上面给出了

parallel -j 0 echo ::: {1..10}
1
2
3
4
5
6
7
8
9
10

这当然有效:

echoSimultaneously() {
    IFS=$'\n'
    parallel -j 0 echo ::: $@
}

run() {
    local IFS string

    IFS=$'\n'
    string=$@

    echoSimultaneously $string
}

export -f echoSimultaneously
  • IFS并且参数$@在其中echoSimultaneously,因此当 GNU 并行在另一个 shell 中运行时,这些参数会被拾取。
bash
  • 1 个回答
  • 39 Views
Martin Hope
Nickotine
Asked: 2024-02-25 08:47:46 +0800 CST

cURL 可以从网站获取用户名和密码字段吗?

  • 5

我正在使用 cURL 登录多个网站。

对于我的情况来说,手动查看 DOM 来获取用户名和密码字段是很乏味的。

然后我将解析这些字段并使用curl -d命令登录。


更新:

我需要登录的唯一原因是为了获取 cookie。对于某些网站来说,Python 也是如此。

cURL,获取netscape格式的cookie,使用Python你必须做更多的工作才能转换为netscape格式。

这个问题已经得到了回答。


更新:

我只需要把用户代理传递进去

login
  • 2 个回答
  • 29 Views
Martin Hope
Nickotine
Asked: 2024-01-31 01:26:24 +0800 CST

SSH for 循环:传递给变量中捕获的函数的参数未扩展

  • 8

我有几台服务器,其中有几个文件,其中包含我需要解析的部署日期信息,并获取 2 个月或更早的文件的本地副本。

#!/bin/bash

# split on new line not space
# don't want to quote everything
# globbing desired
IFS=$'\n'

servers=(
  blue
  red
)

parseDate() {
    grep 'deploy_date:' $file | \
    sed  ...                  | \
    # much more in here...
}

getOldFiles() {
    local #all vars
    currentDateInSecs=$(date +%s)
    twoMonthsInSecs=526000
    for server in ${servers[@]}; do
        oldfile=$(
          ssh $server "
            $(declare -f parseDate)
            for file in /dir/$server/file*; do
                dateInSecs=$(date -jf '%b/%e/%Y' $(parseDate) +%s)
                timeDiff=$((\$currentDateInSecs - \$dateInSecs))
                ((\$timeDiff >= \$twoMonthsInSecs)) &&
                    cat \$file
            done
          "
        )
        [ -n $oldFile ] &&
            cat $oldFile ~/oldFiles/${server}-${file}.txt
    done

问题:

当前的问题是dateInSecs=$(date -jf '%b/%e/%Y' $(parseDate \$file) +%s).

当 变量parseDate \$file中的 is未扩展时,无需命令替换即可正常工作,但我需要它。$()$file

我该如何解决?

信息:

这不是脚本,它们在我的 ~/.bash_profile 中

这是 git 存储库中的一个脚本(以及其他脚本),它源自~/bash_profile(我有一个使用设置源的安装脚本$PWD),因此人们可以直接使用这些命令,而不是 cd'ing 到 git 存储库(其中还有许多其他内容)不适用于他们)。

从 Macos 到 CentOS 服务器运行。

bash
  • 2 个回答
  • 410 Views
Martin Hope
Nickotine
Asked: 2024-01-30 07:48:12 +0800 CST

如何在远程通过 SSH 运行 for 循环以便变量扩展?

  • 5

如果我ls在远程主机中没有 for 循环的文件,一切都很好,但是,如果我捕获ls变量中的 并尝试echo每个文件,它会失败,因为变量没有扩展/没有值。

我的意思是说:

IFS=$'\n'
servers=(
  blue
  green
  red
)
for i in ${servers[@]}; do 
   ssh $i "
     ls /dir/xyz_${i}*/details.txt
   "
done
/dir/xyx_blue0/details.txt 
/dir/xyz_blue1/details.txt
/dir/xyx_green2/details.txt 
/dir/xyz_green4/details.txt
/dir/xyx_red1/details.txt 
/dir/xyz_red8/details.txt

但我实际上需要循环遍历输出,ls以便我可以对文件执行操作,但是变量不会扩展:

for i in ${servers[@]}; do 
   ssh $i "
     for i in $(ls /dir/xyz_${i}*/details.txt); do 
        echo $i
     done
   "
done
not found: /dir/xyx_blue*/details.txt 
not found: /dir/xyx_green*/details.txt 
not found: /dir/xyx_red*/details.txt 

$i在远程主机上运行循环时如何扩展?

bash
  • 2 个回答
  • 47 Views
Martin Hope
Nickotine
Asked: 2024-01-11 15:27:27 +0800 CST

如何从当前日期中减去格式为“xyz/[int][int]/[int][int][int][int]”的日期?

  • 5

设想

我的容器的上次部署日期格式如下:

月/日/年或 2024 年 2 月 11 日。

我无法更改他们输出上次部署日期的方式。

我想从当前日期中减去上次部署日期,然后如果上次部署日期超过 2 个月,则写入文件。

示例container1-last-deploy.txt:

last deployed: jan/01/2024

我有几个这样的文件。

挑战在于月份是用字母给出的。我可以使用正则表达式来获取日期。

我想到的一个解决方案是将月份放在字典中,例如:

dict=(
  ['jan']=1
  ['feb']=2
)

但一定有更好的方法。

是否可以将字母月份转换为整数?

这是针对 macOS 上的 bash,最好是 bash 3 解决方案。

bash
  • 3 个回答
  • 73 Views
Martin Hope
Nickotine
Asked: 2023-12-23 08:03:08 +0800 CST

如何用 sed 删除一行而不留下空行?

  • 5

文件.txt:

line: this-is-some-text
line2: this-is-some-other-text

例子:

sed 's#line:.*##g' File.txt

line2: this-is-some-other-text

正如您所看到的,第一行已被删除,但留下了一个空行。

你能执行sed这样它就不会在删除时留下空行吗?

sed
  • 2 个回答
  • 86 Views
Martin Hope
Nickotine
Asked: 2023-12-15 05:45:20 +0800 CST

SSH 配置:如何停止重复设置/将其放在通配符主机中?

  • 6

我有一个重复设置remoteCommand,如果可能的话,我想将其添加到通配符主机中。

这是一个截断的片段:

host container-server

host container-1 
  remoteCommand docker exec -it containerHostname-01 bash

host container-2
  remoteCommand docker exec -it containerHostname-02 bash

host container-2
  remoteCommand docker exec -it containerHostname-02 bash

host * 
  user <user>
  requestTTY yes
  identityFile ~/.ssh/key
  strictHostkeyChecking no
  userKnownHostsFile /dev/null
  preferredAuthentications publicKey
  hostname <hostname of container server>

由于containerHostname-0<int>所有值都相差一个整数,我假设这是不可能完成的,而且我已经研究了好几天,但什么也没回来,所以有可能吗?

docker
  • 1 个回答
  • 28 Views
Martin Hope
Nickotine
Asked: 2023-12-06 23:34:21 +0800 CST

无法将目录与所有文件内容进行符号链接

  • 5

我想符号链接locations到~/locations.

这样 中的所有内容locations都会出现在 中~/locations:

 λ tree locations/
locations/
├── adelaide
│   └── config
├── amber
│   └── config
├── austin
│   └── config
├── boston
│   └── config
├── boulder
│   └── config
├── durham
│   └── config
├── jade
│   └── config
├── losangeles
│   └── config
├── minsk
│   └── config
├── newcastle
│   └── config
├── opal
│   └── config
└── pearl
    └── config

当我尝试对它们进行符号链接时,它没有达到我的预期:

 λ ln -s locations/*/* ~/locations
ln: /Users/bob.smith/locations//config: File exists
ln: /Users/bob.smith/locations/config: File exists
ln: /Users/bob.smith/locations//config: File exists
ln: /Users/bob.smith/locations//config: File exists
ln: /Users/bob.smith/locations//config: File exists
ln: /Users/bob.smith/locations/config: File exists
ln: /Users/bob.smith/locations//config: File exists
ln: /Users/bob.smith/locations//config: File exists
ln: /Users/bob.smith/locations//config: File exists
ln: /Users/bob.smith/locations//config: File exists
ln: /Users/bob.smith/locations//config: File exists

tree locations
 λ tree ~/locations/
/Users/bob.smith/locations/
└── config -> locations/Adelaide/config

locations正如您所看到的,输出中缺少之后的目录。

我在这里做错了什么?

bash
  • 1 个回答
  • 35 Views
Martin Hope
Nickotine
Asked: 2023-11-22 11:39:57 +0800 CST

如何将命令输出作为参数执行而不使用 $() 保存它?

  • 2

这实际上是为了brew search

但为了简单起见,假设我这样做:

echo -e 'somedir\n\otherdir'
somedir
otherdir

我可以otherdir在不这样做的情况下用作参数吗?

ls $(echo -e 'somedir\n\otherdir |tail -n1)
otherdir

更新以明确目标

为了更清楚somedir并otherdir转到标准输出,我可以仅在otherdir

不捕获 中的输出 $(),然后对其执行命令?

我只是想知道这是否可能,尽管我认为这是不可能的。

bash
  • 2 个回答
  • 76 Views
Martin Hope
Nickotine
Asked: 2023-11-22 11:07:43 +0800 CST

如何使用另一个命令运行上一个命令[重复]

  • 5
这个问题在这里已经有了答案:
如何在 Unix 中动态访问历史记录? (8 个回答)
5 天前关闭。

说我同意:

ls somedir

有没有办法可以用不同的命令重新运行它?

例子:

ls somedir
<run same command as above but with cd instead of ls>
bash
  • 1 个回答
  • 29 Views
Martin Hope
Nickotine
Asked: 2023-11-22 10:46:51 +0800 CST

命令 tput sgr0 更改我的终端字体和文本颜色,如何停止此操作?tput sgr0 后的任何回显输出为粗体白色

  • 4

当我tput sgr0这样做时,它将我的终端字体和颜色更改为白色(应该是黑色)并且看起来是块状的。

请看截图:

enter image description here

我该如何阻止这个?

为了更简洁,任何echo之后tput sgr 0似乎都输出为粗体白色,我的终端文本颜色是黑色。

更新:

我的~.bashrc:

export LC_ALL="en_GB.UTF-8"
export BASH_SILENCE_DEPRECATION_WARNING=1

branch() {
  git branch 2> /dev/null | \ 
  grep \*                 | \ 
  awk '{print$2}'         | \ 
  sed '
    s#^#(#g;
    s#$#)#g
  '
 }

colo() { tput setaf $1; }


PS1='`tput bold``colo 5`\W: `tput sgr0``colo 0``branch``colo 0` \n λ '
macos
  • 1 个回答
  • 48 Views
Martin Hope
Nickotine
Asked: 2023-11-13 06:38:06 +0800 CST

SSH 配置主机自动完成命令不自动完成

  • 5

我编写了一个函数来从 ssh 配置获取主机,而无需获取通配符主机:

sshConfAutoComplete() { 
   cat ~/.ssh/config | \
   grep 'host '      | \
   sed '
     s#.*\*##g; 
     s#host ##g
   '
}

输出:

pi
lynx
iridium
batchelorantor
rasp

输出是正确的,所以我将这个函数添加到: /usr/local/etc/bash_completion.d/ssh

像这样:

sshConfAutoComplete() { 
   cat ~/.ssh/config | \
   grep 'host '      | \
   sed '
     s#.*\*##g; 
     s#host ##g
   '
}
complete -F sshConfAutoComplete ssh

然后我添加了这个来源. /usr/local/etc/bash_completion.d/ssh:~/.bash_profile

Sourced ~/bash_profile,然后当我输入ssh <tab>以下内容时会出现:

pi
lynx
iridium
batchelorantor
rasp

如果我输入ssh ly <tab>它不会自动完成 to lynx,它只会输出上面的内容。

我该如何解决?

bash
  • 2 个回答
  • 41 Views
Martin Hope
Nickotine
Asked: 2023-11-08 06:22:16 +0800 CST

命令类似于 head,只不过不是按换行显示输出,而是按空格显示输出

  • 3

head例子:

Desktop:  
 λ df -h
Filesystem       Size   Used  Avail Capacity iused    ifree %iused  Mounted on
/dev/disk1s7s1  113Gi  8.9Gi  8.6Gi    51%  355384 90345720    0%   /
/dev/disk1s2    113Gi  3.3Gi  8.6Gi    28%    1743 90345720    0%   /System/Volumes/Preboot
/dev/disk1s4    113Gi   24Ki  8.6Gi     1%       5 90345720    0%   /System/Volumes/VM
/dev/disk1s6    113Gi   63Mi  8.6Gi     1%     660 90345720    0%   /System/Volumes/Update
/dev/disk1s5    113Gi   91Gi  8.6Gi    92%  655534 90345720    1%   /System/Volumes/Data
/dev/disk1s1    113Gi   64Ki  8.6Gi     1%      15 90345720    0%   /Volumes/mnbvcxz    - Data
/dev/disk3s1     58Gi   57Gi  843Mi    99%     209  8636800    0%   /Volumes/Untitled

Desktop:  
 λ df -h | head -n1
Filesystem       Size   Used  Avail Capacity iused    ifree %iused  Mounted on

是否有一个专门的命令可以按空格而不是换行显示字段的输出?

一个 cmd 将会执行该awkcmd 的操作:

Filesystem       Size   Used  Avail Capacity iused    ifree %iused  Mounted on \ 
| awk -F ' ' '{print$1}'
Filesystem
command
  • 2 个回答
  • 55 Views
Martin Hope
Nickotine
Asked: 2023-11-03 15:47:43 +0800 CST

ssh 配置:我有很多主机,我想分别使用 2 个不同通配符主机的设置,请查看我的尝试

  • 5

我有 2 组主机,我想使用 2 个单独的通配符主机的设置。

我也有大量的主机,因此需要帮助确定哪种风格最适合这种情况。主机的格式大多为x1 x2 x3...

我的尝试:

1:

host one
  user cat

host two
  hostname 2

host three
  hostname 3

host one two three
  user apple
  identityFile ~/.ssh/id_rsa

host x1
  hostname 7

host y2
  hostname 8

host z3
  hostname 9

host x1 y2 z3
  user duck
  identityFile ~/.ssh/quack

仅使用通配符主机省略主机,但它们适用于主机。

2:

 host x* y* z*
  user duck
  identityFile ~/.ssh/

# for hosts one two three

host * 
  user apple
  IdentityFile ~/.ssh/quack

这些方法是否正确?对于更好的方法有什么建议吗?

请大家批评指正。

ssh-config
  • 1 个回答
  • 48 Views
Martin Hope
Nickotine
Asked: 2023-11-03 08:03:42 +0800 CST

ssh 配置:我可以有 2 个主机通配符吗?

  • 4

简化示例:

host one
  user cat

host two
  hostname 2

host three
  hostname 3

host *
  hostname 1
  

host *
  user apple
  identityFile ~/.ssh/id_rsa

host y
  hostname 7

host t
  hostname 8

host * 
  user duck
  identityFile ~/.ssh/quack

这可能吗?

第一个主机之上的主机host *将仅继承其值,而第二个主机将仅继承host *其之下的主机。

如果没有,有没有办法实现这一目标?

ssh-config
  • 1 个回答
  • 74 Views
Martin Hope
Nickotine
Asked: 2023-11-03 01:25:08 +0800 CST

我可以在某种配置文件中使用这些别名吗?

  • 5

我有很多这样的别名,=之前的部分是ssh配置中的主机

alias sshConfigHost='ssh -t hostname docker exec -it containerName bash'

我可以将它们添加到某种配置文件中吗?主机名是在 ssh 配置中定义的,因此它在某种程度上被使用了两次,我是否可以有一个像这样的占位符,%<whatever>它将从 ssh 配置中获取主机名。

如果没有,那么我至少可以在 ssh 配置中包含容器名称,然后使用占位符将其拉入 cmd 吗?

docker
  • 1 个回答
  • 44 Views
Martin Hope
Nickotine
Asked: 2023-11-01 01:16:18 +0800 CST

ssh 配置:我可以替换代理命令吗?

  • 5

这是我的标准工作 ssh 配置,每个人都使用:

host go
  User user
  ProxyJump otherHostname
  StrictHostKeyChecking=no
  UserKnownHostsFile=/dev/null
  IdentityFile ./ssh/key
  ProxyCommand ssh -i ~/.ssh/key -W %h:%p otherUser@OtherHostname

这proxyCommand部分让我感到困扰,因为 ssh 配置的重点是没有使用命令。

命令参数是否有选项意味着配置中不会有 ssh 命令?

proxyCommand 使用该命令的 IdentityFile 和 ProxyJump 值:

ssh -i ~/.ssh/key -W %h:%p otherUser@OtherHostname

换句话说:

ssh -i IdentityFile -W %h:%p differe tUser@ProxyJump
ssh-config
  • 1 个回答
  • 46 Views
Martin Hope
Nickotine
Asked: 2023-10-27 03:48:40 +0800 CST

如何使用 ssh 配置隧道到主机?

  • 5

我用来建立隧道的命令:

ssh -L port:url:port username@hostname

我可以在 ssh 配置中定义它吗?像这样的伪代码:

host web
  user 
  url
  hostname
  externalPort
  destinationPort
  tunnel yes
ssh
  • 1 个回答
  • 23 Views
Martin Hope
Nickotine
Asked: 2023-06-29 14:32:50 +0800 CST

我的使用功能是否正确实现?

  • 4

我有几个~/.bash_profile用作命令的函数,并且我还为它们创建了使用函数。

我想知道我自己开发的使用功能是否正确实现。

例子

IFS=$'\n'

usageSliceArr() {
  if [ $# != 3 ]; then
      echo 'name, index 1, index 2'
      return 1
  fi
 }

slicearr() {
  if (usageSliceArr $1 $2 $3); then 
      declare -n name=$1
      declare -i fst=$2 lst=$3
      echo ${name[@]:fst:lst}
  fi
 }
bash
  • 2 个回答
  • 104 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve