我的本地可以连接到远程,但它无法连接到 dbserver。远程可以连接到 dbserver(使用 psql)。
我想从我的本地对数据库运行 sql 脚本。
我正在寻找一种在远程打开 psql 并使用 ssh 将我的 stdin 和 stdout 定向到我的本地的方法。
现在在愚蠢的选项中,我这样做:
ssh remote
psql -h db report
password
run my commands
Run Code Online (Sandbox Code Playgroud)
我可以通过这种方式在脚本中完成它,但它丑陋且不允许我与 psql 进行交互会话。
PSQL="PGPASSWORD=mypassword psql -h dbserver -d report"
SQL="SELECT 1"
ssh remote "$PSQL --command 'COPY ($SQL) TO STDOUT WITH CSV;'"
Run Code Online (Sandbox Code Playgroud)
Ps-Python 也可以。
我正在合并一个脚本片段,它通过以下方式确定 Android 版本:
adb shell getprop ro.build.version.release
返回:4.1.2或4.0.4
该代码段目前如下所示:
if [ "$(adb shell getprop ro.build.version.release)" == "4.1.2" ]; then
rw_path="/sdcard/"
elif [ "$(adb shell getprop ro.build.version.release)" == "4.0.4" ]; then
rw_path="/data/local/"
fi
echo $rw_path
Run Code Online (Sandbox Code Playgroud)
我认为 adb 可能会通过 stderr 返回值,就像它使用推/拉输出一样,所以我也尝试了这个(但不确定这是否是正确的方法):
if [ "$(adb shell getprop ro.build.version.release 2>&1)" == "4.1.2" ]; then
rw_path="/sdcard/"
elif [ "$(adb shell getprop ro.build.version.release 2>&1)" == "4.0.4" ]; then
rw_path="/data/local/"
fi
echo $rw_path
Run Code Online (Sandbox Code Playgroud)
尝试了 -eq 运算符而不是 ==,但它警告“预期为整数表达式”。
然后我尝试了这个以确保它确实比较了一些东西:
version=$(adb shell getprop ro.build.version.release 2>&1)
if …Run Code Online (Sandbox Code Playgroud) 我正在尝试调用 shell 包装器进行 phing
phing
Run Code Online (Sandbox Code Playgroud)
...但它不能识别环境,我得到一个
-bash: phing: command not found
Run Code Online (Sandbox Code Playgroud)
...即使文件以:
#!/usr/bin/env php
Run Code Online (Sandbox Code Playgroud)
调用文件
php phing
Run Code Online (Sandbox Code Playgroud)
工作得很好。
该文件是可执行的,我从它自己的目录中调用它。
这怎么可能?
我对使用 SSH 非常陌生,并且无法找到查看和终止正在运行的 PHP 进程的方法。
当我说“PHP 进程”时,我指的是通过浏览器启动的 PHP 文件,但在它们应该停止时继续运行。
我试过这个:
ps aux | grep php
Run Code Online (Sandbox Code Playgroud)
但是没有任何结果,即使我知道文件正在运行。
如何查看正在运行的文件,然后有选择地杀死它们(或全部杀死)?
我想要一行 shell/bash 来做一些事情:
test "`free | grep | awk | whatever` -gt 80" && any_command
Run Code Online (Sandbox Code Playgroud)
将整个系统使用的 ram的总百分比与硬编码数字(在我的情况下为 80)进行比较。test只要any_command在 ram 高于给定百分比时执行就无关紧要。
有关于这是如何构建 monit/bluepill/god 之类的问题的答案。我 100% 同意,您很可能应该遵循这些答案中的建议。但是,这个问题特别是关于我所描述的确切路线,无论出于何种原因,假设这可能涉及所有注意事项和问题。
我正在使用命令行按照相同的模式手动执行相同的命令多次。现在我正在寻找一种方法来简化它,只需输入一次命令即可。
让我们看一个普通的 docker 示例:
docker ps
docker ps -a
docker ps -l
docker stop x
docker start x
docker start y
docker logs y
docker logs -f z
Run Code Online (Sandbox Code Playgroud)
此示例也适用于更多命令,例如 git、brew、gulp、gcloud。
现在我正在寻找某种命令包装外壳,它允许我编写with docker将任何命令包装在嵌套/子外壳中的命令。
然后我不需要在docker命令前面加上命令,只需调用:
>ps
# does docker ps and displays result
>stop x
# prepends docker so docker stop x is actually executed
CTRL+C # to exit the command wrapper
Run Code Online (Sandbox Code Playgroud)
像这样的东西已经存在了吗?我在谷歌上搜索它,但无法正确描述它,因此我没有找到任何东西。
由于各种原因,我需要启用 telnet 访问(通过专用网络),并且当有人尝试使用特定用户帐户登录时(可以说CheckStatus),它不是给用户一个 shell,而是运行一些非常非常快的代码/ script/whatever 并返回两个非常具体的字符串之一。该帐户可以有密码。
我本质上是在尝试复制当您尝试通过 SSH 连接到 Github 的服务器时发生的情况,它们告诉您未授予 shell 访问权限。
我认为解决这个问题的方法是替换用户的 shell,所以我创建了脚本:
#! /bin/bash
echo "HI!!!"
Run Code Online (Sandbox Code Playgroud)
然后尝试通过以下方式将其设置为用户的外壳:
test@development-1:~$ chmod +x test.sh
test@development-1:~$ chsh
Password:
Changing the login shell for test
Enter the new value, or press ENTER for the default
Login Shell [/bin/bash]: /home/test/test.sh
chsh: /home/test/test.sh is an invalid shell
Run Code Online (Sandbox Code Playgroud)
关于最好的方法有什么想法吗?
作为参考,我们的大多数系统都是 Ubuntu 14.04。
实际上我想在每次用户登录以及启动时运行我的 shell 脚本。我尝试过使用 crontab,但它仅在启动时运行,而不是每次登录时运行。所以请告诉我如何执行此操作。
#crontab -e
@reboot /home/user/test.sh
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建shell用于将文件复制到远程备份的脚本。
到目前为止,这是我的脚本:
PASSWORD=MY-SECRET-PASS
URL=SLOS755513-3:SL1255513@objectstorage.net
DIR=/backup
scp /home/user/my_log.txt $URL:$DIR
Run Code Online (Sandbox Code Playgroud)
但我收到错误:
ssh: Could not resolve hostname SLOS755513-3: Name or service not known
lost connection
Run Code Online (Sandbox Code Playgroud)
我想这是因为用户名中的特殊字符,因为如果我只是简单地写,test它实际上会尝试以test用户身份连接。
但我试图逃避\-,\:一切都给了我同样的错误。我也不确定如何在脚本中使用密码。
这个问题可能有点幼稚,但是有没有一种 shell 往往在 Unix/Linux 用户中最受欢迎?
我以前的公司基本上是在 tcsh 上标准化的,所以我学到了一个是好是坏,但我想知道我是否应该学习 bash、ksh 或任何其他的,如果这些更常见的话。