我在本地服务器上备份 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) 我想用给定远程主机的 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)
它工作正常,但我有几个问题:
我想对文件运行 gpg 加密,而无需在系统中注册密钥。
理想情况下,有一种方法可以传递密钥文件的路径,并为我在目标文件上运行加密。
有没有办法做到这一点?我正在运行 CentOS Linux。
我将如何编写一个创建目录 test0-test63 的 BASH 脚本?我在想一些事情:
for x in range (64)
mkdir ./test'x'
Run Code Online (Sandbox Code Playgroud) 我只是在阅读 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工作的,当你使用它时会发生什么&?
当它看起来像这样时,如何从 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开始一个新会话并关闭旧会话。
我见过这个,但它对我不起作用。我没有使用 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),这帮助我弄清楚我把它们放在了错误的地方。
我不知道如何在字符串(例如“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) 我发现这个提示超级有用,使用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:///前缀传递参数。
如何允许用户在 chroot 用户上使用 SCREEN?
我已经尝试了一切,但我一直失败。
我需要用户在以 chroot 用户身份登录 bash 时能够使用 SCREEN。
bash ×10
linux ×5
script ×2
chroot ×1
console ×1
console2 ×1
context-menu ×1
curl ×1
cygwin ×1
ftp ×1
gnu-screen ×1
gnupg ×1
mac ×1
networking ×1
pgp ×1
shell ×1
shell-script ×1
ssh ×1
tar ×1
terminal.app ×1
unix ×1