is there any way (what is the easiest way in bash) to combine the following:
mkdir foo
cd foo
Run Code Online (Sandbox Code Playgroud)
的联机帮助页mkdir没有描述类似的内容,也许有一个花哨的版本mkdir?我知道这cd必须是 shell 内置的,所以花哨的也是如此mkdir......
别名?
我想确保在脚本的某个点,在source配置文件之后,设置了几个变量,如果没有,则停止执行,告诉用户丢失的变量。我试过了
for var in $one $two $three ; do
...
Run Code Online (Sandbox Code Playgroud)
但是如果例如$two未设置,则永远不会为 执行循环$two。我尝试的下一件事是
for var in one two three ; do
if [ -n ${!var} ] ; then
echo "$var is set to ${!var}"
else
echo "$var is not set"
fi
done
Run Code Online (Sandbox Code Playgroud)
但是如果没有设置两个,我仍然会得到“两个设置为”而不是“两个未设置”。
如何确保设置了所有必需的变量?
更新/解决方案:我知道“设置”和“设置,但为空”之间存在差异。我现在使用(感谢/sf/answers/1172747551/和这个问题的答案)以下内容:
if [ -n "${!var:-}" ] ; then
Run Code Online (Sandbox Code Playgroud)
所以,如果var设置了但为空,它仍然被认为是无效的。
我有几个文件在文件名中存在编码问题(德语变音,用 Windows 刻录在 CD 上,由 Windows 读取并使用 Seafile 同步到 Linux。有些地方出了问题......)。Bash 和 zsh 只显示“?” 而不是变音,stat显示类似
$ stat Erg?nzung.doc
File: ‘Erg\344nzung.doc’
Size: 2609152 Blocks: 5096 IO Block: 4096 regular file
Device: 806h/2054d Inode: 12321475 Links: 1
Run Code Online (Sandbox Code Playgroud)
我只能使用自动完成功能输入文件名。如何重命名文件?LibreOffice(或其他文件类型的其他程序)似乎无法读取受影响的文件,他们抱怨“没有这样的文件或设备”。
我在想mv --by-inode 12321475 Ergänzung.doc,但没有--by-inode开关mv。我还可以做些什么?
我目前正在摆弄一个垂死的硬盘,在尝试从中获取cp数据时,我收到了类似的错误
cp: error reading ‘brokenFile’: Input/output error
# comparison: backtick: `, apostrophe '
Run Code Online (Sandbox Code Playgroud)
我现在尝试通过使用sed将错误消息转换为新cp调用来再次复制失败的文件(我已经成功了几次)。但是:什么是有趣的引号?它们甚至在开始/结束时都不同。它没有反引号,也没有撇号。我将它复制/粘贴到我的正则表达式中,但有更好的方法吗?也许使用撰写?
bash ×2
cd-command ×1
command-line ×1
cups ×1
inode ×1
lpr ×1
mkdir ×1
mv ×1
printing ×1
rename ×1
shell ×1
shell-script ×1
unicode ×1