小编ano*_*nol的帖子

将布尔值转换为 {0, 1} 的 Excel 公式

什么是Excel公式布尔值转换{FALSE, TRUE}{0, 1}

假设有一个短于=IF(cond,1,0).

worksheet-function microsoft-excel

26
推荐指数
3
解决办法
10万
查看次数

VirtualBox 命令行 - 设置端口转发

我知道如何使用 VirtualBox 图形界面配置基于 NAT 的端口转发(如下例所示)。

如何通过命令行执行相同的操作?

通过 VirtualBox GUI 进行端口转发

virtualbox port-forwarding command-line

12
推荐指数
2
解决办法
2万
查看次数

使用内置的 Bash 运行 `exec`

我定义了一个 shell 函数(我们称之为clock),我想将它用作另一个命令的包装器,类似于time函数,例如clock ls -R.

我的 shell 函数执行一些任务,然后以exec "$@".

我希望这个函数即使使用 shell 内置函数也能工作,例如clock time ls -R应该输出内置函数的结果time,而不是/usr/bin/time可执行文件。但exec最终总是运行命令。

如何让我的 Bash 函数作为一个也接受 shell 内置函数作为参数的包装器工作?

编辑:我刚刚了解到它time不是内置的 Bash,而是与管道相关的特殊保留字。我仍然对内置解决方案感兴趣,即使它不适用于time,但更通用的解决方案会更好。

bash shell command-line

9
推荐指数
1
解决办法
2534
查看次数

shell:“不能移动那么多”错误

以下脚本在我的一台机器上运行良好,1然后打印2

#!/bin/sh

echo "1"
shift
echo "2"
Run Code Online (Sandbox Code Playgroud)

然而,在另一台机器上,它产生以下输出:

1
./script.sh: 4: shift: can't shift that many
Run Code Online (Sandbox Code Playgroud)

man shift没有帮助(No manual entry for shift)。

这是什么错误,为什么会发生,我该如何解决?

shell

8
推荐指数
1
解决办法
1万
查看次数

删除“。” 站在上面的时候

在玩弄文件系统时,我尝试了以下操作:

mkdir a
cd a
rmdir .
Run Code Online (Sandbox Code Playgroud)

结果是:

rmdir: failed to remove ‘.’: Invalid argument
Run Code Online (Sandbox Code Playgroud)

好的,先生rmdir,让我智胜你:

rmdir ../a
Run Code Online (Sandbox Code Playgroud)

...好的。

什么?这次没有报错?

我还是终端说我在目录中a,但ls -a名单没有(没有.,也没有..),但ls ..pwd预期仍然工作。

我是不是像那些砍了自己的树枝还没有倒下的卡通人物之一?

如果我尝试

mkdir ../a
Run Code Online (Sandbox Code Playgroud)

它创建了一个目录a,但这仍然不是我所在的目录(ls -a .ls -a ../a显示不同的结果)。

如果我尝试用touch b它创建一个文件,它会回复:

touch: cannot touch ‘b’: No such file or directory
Run Code Online (Sandbox Code Playgroud)

但是touch .有效。

最后,一旦我离开我的目录,它就会消失,我无法返回。

编辑:有人可以解释一下这里发生了什么吗?这种情况有名字吗?这是文件系统和 Bash 之间的问题,还是 Bash 中的某些特殊硬编码行为?

bash

5
推荐指数
1
解决办法
367
查看次数

只能直接连接,不能通过路由器

我当地的住房互联网提供商刚刚改变了它的政策,他们似乎阻止路由器工作1

我的设置(已经工作了一年):

[ISP router (in the residence, out of my reach)] -- My DD-WRT router -- PC

-- : RJ45 cable connection
Run Code Online (Sandbox Code Playgroud)

截至目前,它停止工作。经过一些测试,这是我发现的:

  • 路由器-PC 连接似乎没问题(我可以通过 SSH 访问它的 Web 界面)
  • 路由器-ISP 连接似乎没问题(通过 SSH 连接到我的路由器,我可以 ping 8.8.8.8/8.8.4.4)
  • PC-Router-ISP 连接不工作(甚至无法 ping 8.8.8.8/8.8.4.4)

我想了解 ISP 是否有可能以这种方式阻止连接,以及是否有办法避免它2

1 这一变化显然是为了防止人们同时使用多个设备。这是一个从未宣布过的任意规则。他们只能做到这一点,因为他们垄断了我的学生宿舍。

2 我不认为这是未经授权的,因为我从未签署任何 ToS 或必须接受任何 EULA。我搬进来的那天,我插上了我的路由器,从那时起它就一直在工作。我付房租,我的住所付给ISP,因此垄断。

有关我的设置的详细信息

我在其标准网关配置上使用 DD-WRT。这似乎是一个一对多的 NAT,因为这个网站说:

要禁用 NAT 并仍然拥有路由/防火墙,您可以将操作模式更改为“路由器”而不是“网关”(位于高级路由中)

这个DD-WRT的维基页面解释了如何配置一个一对一NAT,因此我的默认配置应该是一个一对多的NAT。

这样对吗?如果已经是这种情况,我的 ISP 是否能够以某种方式检测我是否使用了直接连接?我认为将来自路由器的数据包的 TTL 手动设置为 1 会产生这种效果,但我不确定。

编辑:也许我误解了它,但 TTL 可能是罪魁祸首。这是结果ping 8.8.8.8

PING …
Run Code Online (Sandbox Code Playgroud)

networking dd-wrt

5
推荐指数
1
解决办法
1850
查看次数

安装 Cygwin 时出现 cygwin1.dll not available 错误

我无法使 Cygwin 正常工作。

从 Cygwin 网站下载 Cygwin 安装文件(32 位版本setup-x86.exe或 64 位版本setup-x86_64.exe)后,我运行它在我的 64 位 Windows 7 上安装 Cygwin。

我选择了安装目录、下载包的目录和一台镜像服务器。Cygwin 成功创建目录,下载包列表并显示包选择屏幕。

我只是单击 Next 以使用默认选择前进,Cygwin 向我显示了要安装的软件包列表。然后,它下载了所有软件包并开始安装它们。

然后它开始多次显示众所周知的错误消息:

程序无法启动,因为您的计算机缺少 cygwin1.dll。尝试重新安装程序以解决此问题。

当某些默认包尝试运行dash.exebash.exe自行配置时会发生这种情况。

一些谷歌搜索建议:

  1. 仅选择基本软件包重新安装 Cygwin。由于我没有选择要安装的软件包,这已经是“最小”设置;
  2. 将 Cygwin 的bin目录添加到 PATH 环境变量中。不幸的cygwin1.dll是,从未下载/安装过,因此即使这样做也无济于事。

cygwin1.dll文件不可从 Cygwin 网站直接下载(至少从安装页面看不到)。

如何修复此基本安装?

cygwin

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

确定性地压缩压缩的 .tar.gz 文件

我想对压缩文件执行一系列重新压缩以研究它们的属性。

起初,我尝试简单地.zip在循环中重新压缩文件:

for f in $(seq 1 100)
do 
  zip $f.zip -9 -v $(($f-1)).zip
done
Run Code Online (Sandbox Code Playgroud)

从一个固定0.zip文件开始,我注意到,如果我重新运行这些行,除了前几个文件外,所有文件都有不同的大小。经过一番调查,我意识到这是由压缩文件的时间戳引起的。然后我在重新压缩之前重置时间戳:

for f in $(seq 1 100)
do
  touch $(($f-1)).zip -t 200101010101
  zip $f.zip -9 -v $(($f-1)).zip
done
Run Code Online (Sandbox Code Playgroud)

这次我使用zip. 但是,targzip算法一起 使用仍然不起作用。每次我运行:

for f in $(seq 1 100)
do
  touch $(($f-1)).tar.gz -t 200101010101
  tar cvfz $f.tar.gz $(($f-1)).tar.gz
done
Run Code Online (Sandbox Code Playgroud)

我得到不同的文件大小,从4.tar.gz直到100.tar.gz. 为什么会发生这种情况,我可以做些什么来防止它发生?

compression gzip

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

wget 从任意字节开始

使用该-c标志,我可以告诉wget恢复下载。wget然后将查询预先存在的文件的大小,以告诉服务器从哪里恢复下载。

有没有办法告诉wget从任意偏移量开始,即等效于curl's-C选项?

我知道我总是可以手动创建一个大小合适的文件,将新数据附加到其中,然后删除前缀,但是这样做非常麻烦。

wget

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

取消 SSHFS(保险丝)挂载 - 无法删除目录

我试图在本地挂载一个 SSHFS 目录,失败了,现在我不能再使用我原来的目录了。

按照教程,我刚刚安装了sshfs软件包,执行了sudo modprobe fuse,然后创建了一个本地目录remote,我想在其中挂载远程目录。

然后我sshfs -o idmap=user "myuser@<host>:/home/myuser" remote按照教程中的说明运行了 ,但是我的连接速度很慢,所以我按了 Ctrl+C。

现在,如果我ls在其父目录上执行此操作,则会获得此条目(例如,我也保留了下一个条目):

...
d?????????  ? ?      ?      ?    ?            remote
drwxr-xr-x  2 myuser myuser 4096 Mar 13 11:02 Videos
...
Run Code Online (Sandbox Code Playgroud)

如果我尝试cd remote,我会得到:

cd: transport endpoint is not connected: remote

尝试删除目录不成功:

rmdir: failed to remove ‘remote’: Device or resource busy

我怎样才能摆脱这个目录,最好不必重新启动?

ssh mount sshfs fuse

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