标签: bash

为什么在使用 bash ftp 将文件移动到远程服务器后,我的 tar.gz 文件已损坏?

我在本地服务器上备份 tar.gz 文件,然后 ftp 到远程服务器。如果我通过 ftp 客户端从本地服务器将它拉到我的桌面,该文件工作正常。如果我从远程服务器通过 ftp 客户端将它拉到我的桌面,它会小几个字节并且损坏。我已经尝试使用客户端强制使用 ascii 和二进制模式,并且都没有损坏文件,所以我不明白为什么这会导致脚本损坏。有任何想法吗?文件传输正常,就是打不开。先感谢您。

cd $FSBACKDIR
ATTACH='for file in *$DATE.tar.gz; do echo -n -e "put ${file}\n"; done'
ftp -nv <<EOF
open $FTPHOST
user $FTPUSER $FTPPASS
cd $FTPDIR
$ATTACH
quit
EOF
Run Code Online (Sandbox Code Playgroud)

linux ftp bash tar

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

用于获取远程主机 IP 地址的脚本或工具

我想用给定远程主机的 IP 地址设置一个环境变量。这是我到达的解决方案:

export IP=`curl http://network-tools.com/default.asp?host=www.example.com | 
       grep -oE '<br>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | 
       cut -c5-`
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我有几个问题:

  1. 是否有一个简单的工具可以获得相同的结果?我需要它通过限制主机名的代理工作,这就是我使用网络工具页面的原因。
  2. 我怎样才能使它成为主机名的函数?类似于 getIP(hostname)

networking script bash

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

一步简单的PGP加密?

我想对文件运行 gpg 加密,而无需在系统中注册密钥。

理想情况下,有一种方法可以传递密钥文件的路径,并为我在目标文件上运行加密。

有没有办法做到这一点?我正在运行 CentOS Linux。

linux bash pgp gnupg

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

Bash 中的循环,用于创建按顺序编号的文件夹

我将如何编写一个创建目录 test0-test63 的 BASH 脚本?我在想一些事情:

for x in range (64)
     mkdir ./test'x'
Run Code Online (Sandbox Code Playgroud)

bash shell-script

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

在 bash 中同时使用“source”和“&amp;”

我只是在阅读 Unix shell 如何工作(bash特别是),我尝试了一些对我来说没有意义的东西。

据我了解,该source命令运行您在当前 shell 进程中提供的程序,而不是派生子进程。

另一方面,在运行&的进程完成之前,运行一个命令后跟将控制权返回给用户。如果不带 source 运行命令&,则当前 shell 在子进程退出之前将控制权返回给用户。

但是,当我创建了一个名为文件test.txt包含hello world,跑:

source /bin/cat test.txt
Run Code Online (Sandbox Code Playgroud)

......我明白了-bash: ????: command not found

同样,当我尝试使用加载我的 virtualenv 时

source ./venv/bin/activate &
Run Code Online (Sandbox Code Playgroud)

我刚刚得到了退出状态和进程 ID [1] 26489

这是怎么回事?特别是对于第二个命令。我糊涂了。

它是如何source工作的,当你使用它时会发生什么&

unix bash shell

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

Linux 终端 - 冻结更新输入但可以执行命令?

当它看起来像这样时,如何从 SSH 中重新启动 shell 会话:

anton@ubuntu:~$ c: command not found
                                    anton@ubuntu:~$ lib
                                                       anton@ubuntu:~$ this is working, but its messed up
                         anton@ubuntu:~$
Run Code Online (Sandbox Code Playgroud)

我可以执行命令,但是当我输入它们时,控制台上没有任何显示。但是只要我按下Enter命令就会执行并且输出就会出现(没有行尾,如上所示)。

exec bash
bash --login
clear
Run Code Online (Sandbox Code Playgroud)

没有什么真正起作用,但重新启动 SSH 会话有效。临时解决方案是启动一个屏幕会话,每次界面冻结时,您只需执行Ctrl+ a->c开始一个新会话并关闭旧会话。

linux ssh bash console

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

配置 Console2 在当前文件夹中打开 bash

我见过这个,但它对我不起作用。我没有使用 Git 的 bash 版本,而是使用 cygwin 附带的版本,因此这可能是问题的一部分。这是我在 Console2 中设置选项卡的方式:

Title: bash.exe
Shell: C:\cygwin\bin\bash.exe --login -i
Startup dir: %HOMEDRIVE%%HOMEPATH%
Run Code Online (Sandbox Code Playgroud)

这是我的注册表项:

Directory
    shell
        Console2
            Open Console2 Here
            command
                "C:\Console2\Console.exe" -d "%1"
Run Code Online (Sandbox Code Playgroud)

bash 总是从我的主目录而不是我点击的目录开始,然后我必须cd /cygdrive/d/code......等等。我尝试删除“启动目录”字段中的值,将其更改为 %1, %1% 没有运气。

我也尝试过这个解决方案,但它对我也不起作用:

Title: bash.exe
Shell: C:\cygwin\bin\bash.exe -l
Run Code Online (Sandbox Code Playgroud)

注册表:

Directory
    shell
        Console2
            Open Console2 Here
            command
                "C:\Console2\Console.exe" -d "%V"
Run Code Online (Sandbox Code Playgroud)

上述解决方案适用于 Git 包含的 bash.exe 和 sh.exe 版本,但由于某种原因不适用于 cygwin 包含的版本。还在找这个原因。

编辑

我在下面选择了一个答案,但我认为如果我在正确的文件夹中创建了 .profile 文件,上面的第二个解决方案会起作用。我一直试图在我的普通主目录而不是 cygwin 使用的主目录中创建它,这就是它从未执行脚本的原因。这让我相信 .profile 文件是不必要的。我选择的答案(感谢 Hugh!)清楚地解释了 bash 如何使用每个脚本(.bash_profile、.bash_login、.profile 和 .bashrc),这帮助我弄清楚我把它们放在了错误的地方。

windows-registry cygwin bash context-menu console2

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

带有波浪号的 Bash 前缀字符串以扩展到主目录

我不知道如何在字符串(例如“user1”)前加上波浪号(~)来生成~user1并将其扩展到 user1 的主目录。

这是我现在所拥有的:

USER="user1"
ls ~${USER}
ls: cannot access ~user1: No such file or directory
Run Code Online (Sandbox Code Playgroud)

~user1没有被扩展。我怎样才能实现它?

编辑

这不起作用:

$ cat test.sh
USER="user1"
ls $(~$USER)

$ sh -x test.sh
+ USER=user1
+ ~user1
test.sh: 1: ~user1: not found
+ ls
test.sh
Run Code Online (Sandbox Code Playgroud)

linux script bash string-manipulation

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

如何在.bash_profile 中为带参数的`curl` 制作别名/函数?

我发现这个提示超级有用,使用curl恢复中断的文件复制。

完整的语法是:

curl -C - -O file:///Volumes/path/to/file
Run Code Online (Sandbox Code Playgroud)

我想添加一个别名或函数调用resume到我的.bash_profile(在 Mac 上),以便我可以使用类似的东西

resume /Volumes/disk1/file
Run Code Online (Sandbox Code Playgroud)

我打算尝试类似的东西

function resume() { ... }
Run Code Online (Sandbox Code Playgroud)

但我不确定如何使用file:///前缀传递参数。

mac bash terminal.app curl .bash-profile

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

chroot 后如何使用终端 SCREEN?

如何允许用户在 chroot 用户上使用 SCREEN?

我已经尝试了一切,但我一直失败。

我需要用户在以 chroot 用户身份登录 bash 时能够使用 SCREEN。

linux bash gnu-screen chroot

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