我使用的是 Raspberry Pi 5,我必须从源代码构建才能获得最新的稳定版本。该程序已成功构建,我可以正常运行它。但是,每当我打开新终端时,我都必须先运行该命令,export PATH="$HOME/neovim/bin:$PATH"
然后才能正常使用该程序。如何将终端设置为在打开它时自动运行此命令,而无需手动输入。请解释一下,就像我是一个全新用户一样。预先感谢您的帮助。
's questions
如果我们删除原始文件,为什么硬链接不会损坏?如果我删除原始文件,那么软链接会损坏,但硬链接不会损坏,所以为什么它不会损坏
为什么lsattr
只对文件起作用?当我尝试在目录上使用它时,它不起作用,除了它的内容。对于文件,属性显示正确,但对于目录,什么都不显示。
例如:
$ sudo lsattr ~/.pcb
$
你能帮我理解这个工具的局限性及其正确使用方法吗?
单文件 bash 脚本中的菜单及其子菜单,每个都有一个返回根目录的菜单。
我的问题是show_root_menu
调用有时只是跳转到上层菜单而不是根目录。
nvidia 子菜单最常出错,返回根菜单。
show_pckg_menu
当从“安装图形专有驱动程序”子菜单中选择“显示根菜单”时,它会转到“包选项” :
到目前为止,我的其他相关问题已解决:
$ shellcheck myscript No issues detected!
实际脚本是:
#!/bin/bash
show_root_menu(){
width=72
height=50
menu_height=8
backtitle="Installer-menu"
title="Setup opions"
menu="Choose one of the following options:"
options=(1 'Add Mint PPA and update'
2 'Install Cinnamon '
3 'update and upgrade '
4 'Additional software installation '
5 'Upgrade Kernel '
6 'Resolve Ubuntu Cinnamon issues '
7 'Install graphic proprietary driver'
x reboot
q quit )
result=$(dialog --clear \
--backtitle "$backtitle" \
--title "$title" \
--menu "$menu" \
$height $width $menu_height \
"${options[@]}" \
2>&1 >/dev/tty)
}
show_pckg_menu(){
width=72
height=22
menu_height=8
backtitle='Installer-menu'
title='Package options'
menu='Choose one of the following options:'
options=(1 'Install package list'
2 'Export package list'
3 'update and upgrade'
4 'Show root menu'
x reboot
q quit )
result=$(dialog --clear \
--backtitle "$backtitle" \
--title "$title" \
--menu "$menu" \
$height $width $menu_height \
"${options[@]}" \
2>&1 >/dev/tty)
}
show_solver_menu(){
width=72
height=22
menu_height=8
backtitle='Installer-menu'
title='Resolver menu'
menu='Choose one of the following options:'
options=(1 'Network applet problem'
2 'Sound problem'
3 'update and upgrade'
4 'Show root menu'
x reboot
q quit )
result=$(dialog --clear \
--backtitle "$backtitle" \
--title "$title" \
--menu "$menu" \
$height $width $menu_height \
"${options[@]}" \
2>&1 >/dev/tty)
}
show_nvidia_menu(){
width=72
height=22
menu_height=8
backtitle='Installer-menu'
title='NVidia driver selection'
menu='Choose one of the following options:'
options=(1 'Install nvidia 515'
2 'Install nvidia 525'
3 'Update and upgrade'
4 'Show root menu'
x reboot
q quit )
result=$(dialog --clear \
--backtitle "$backtitle" \
--title "$title" \
--menu "$menu" \
$height $width $menu_height \
"${options[@]}" \
2>&1 >/dev/tty)
}
show_root_menu
case "$result" in
1) echo 'Mint backport repos installed';
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com A1715D88E1DF1F24 40976EAF437D05B5 3B4FE6ACC0B21F32 A6616109451BBBF2;
sh -c 'echo "deb http://packages.linuxmint.com vanessa main upstream import backport romeo" >> /etc/apt/sources.list.d/mint.list';
sh -c 'echo "deb-src http://packages.linuxmint.com vanessa main upstream import backport romeo" >> /etc/apt/sources.list.d/mint.list';
apt-key export 451BBBF2 | gpg --dearmour -o /etc/apt/trusted.gpg.d/mint.gpg;
apt update;
show_root_menu;;
2) echo 'Installation of Cinnamon';
apt install slick-greeter muffin cinnamon;
show_root_menu;;
3) echo 'Package upgrade';
apt update && apt upgrade -y;
show_root_menu;;
4) show_pckg_menu;;
5) sh ubuntu-mainline-kernel.sh;
show_root_menu;;
6) show_solver_menu;;
7) show_nvidia_menu;;
x) echo Reboot;
reboot;;
q) clear;
exit ;;
esac
show_pckg_menu
case "$result" in
1) echo 'Package Install';
sh installpkgs.sh;;
2) echo 'Manualy installed packages exported';
sh pkgsexport.sh;;
3) echo 'Package upgrade';
apt update && apt upgrade -y;
show_pckg_menu;;
4) show_root_menu;;
x) echo 'Reboot';
reboot;;
q) clear;
exit ;;
esac
show_solver_menu
case "$result" in
1) echo 'Applying changes to network settings';
clear;
option_picked "Option 1 Picked";
touch /etc/network/interfaces;
sh -c 'echo "auto lo" >> /etc/network/interfaces';
sh -c 'echo "iface lo inet loopback" >> /etc/network/interfaces';
sh -c 'echo " renderer: NetworkManager" >> /etc/netplan/*.yaml';
netplan apply;
show_solver_menu;;
2) echo 'Applying changes to sound settings';
ln -s /usr/share/pipewire /etc/pipewire;
touch /usr/share/pipewire/media-session.d/with-pulseaudio;
systemctl --user restart pipewire-session-manager;
systemctl --user start pulseaudio;
show_solver_menu;;
3) echo 'Package upgrade';
apt update && apt upgrade -y;
show_solver_menu;;
4) show_root_menu;;
x) echo 'Reboot';
reboot;;
q) clear;
exit ;;
esac
show_nvidia_menu
case "$result" in
1) echo 'NVidia driver 515 installation';
apt install nvidia-driver-515 -y;
show_nvidia_menu;;
2) echo 'NVidia driver 525 installation';
apt install nvidia-driver-525 -y;
show_nvidia_menu;;
3) echo 'Package upgrade';
apt update && apt upgrade -y;
show_nvidia_menu;;
4) show_root_menu;;
x) echo 'Reboot';
reboot;;
q) clear; exit ;;
esac
我使用了@Artem S. Tashkinov 建议的脚本:“这是我为自己编写的,但它在控制台上运行。 ”
$sh raw_io.sh:
20: shopt: not found
raw_io.sh:
48: declare: not found
raw_io.sh:
61: Syntax error: redirection unexpected
我发现我只需要使其可执行并双击它,然后“在终端中运行”:
由于它令人耳目一新,我无法复制/粘贴输出。所以我做了一个屏幕截图:
由于它通过双击工作,但我需要单击“在终端中运行”,我也想知道如何从终端直接启动它。
~/Desktop$ raw_io
raw_iso: command not found
那么这些启动方式有什么区别呢?
在 nano 文本编辑器中,我可以将选择通过管道传输到命令中,而且我经常需要将文本居中,所以我想出了以下代码
center() {
str=$1
# Strip leading and trailing whitespace from the string
str=$(echo "$str" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
str_len=${#str}
margin=$(((80 - str_len) / 2))
printf "%*s%s%*s\n" $margin "" "$str" $margin ""
}
但我不太了解脚本,所以我想知道如何改进这段代码。
为什么要链接到 bash 解决方案?我不使用这个 shell,我只是想让它用 sh 运行
如何链接命令,即使一个命令的输出成为另一个命令的输入?
basename | dirname /dev/null
预期输出:
dev
实际输出:
usage: basename string [suffix]
basename [-a] [-s suffix] string [...]
/dev
还尝试了以下但它也没有用:
dirname /dev/null | basename
我知道要处理文件名中的空格,您应该将整个文件名用引号括起来,但这不适用于此脚本,实际上发生的情况恰恰相反,它只能在不使用引号的情况下工作,我不明白为什么. 经测试gnome-terminal
。
echo "Drag and drop some file"
read FILE
NAME=$(basename "$FILE")
cp "$FILE" ~/foo/bar/"$NAME" && echo "Success!"
我有一个TD-LTE无线终端,可以作为外接4G网卡使用。它通过USB连接到计算机。当我使用 Debian 11 时,它可以很好地提供 USB 以太网。但是,当我尝试在 Arch 中使用它时。我无法访问找到 USB 以太网。
ip
不显示外部设备
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
link/ether f0:76:1c:08:1f:7b brd ff:ff:ff:ff:ff:ff
3: wlp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DORMANT group default qlen 1000
link/ether 48:51:b7:f5:a5:be brd ff:ff:ff:ff:ff:ff
也许 Arch 需要设备的特殊固件或驱动程序。我怎样才能找到它?
lspci
不显示外部设备
00:00.0 Host bridge: Intel Corporation Haswell-ULT DRAM Controller (rev 0b)
00:02.0 VGA compatible controller: Intel Corporation Haswell-ULT Integrated Graphics Controller (rev 0b)
00:16.0 Communication controller: Intel Corporation 8 Series HECI #0 (rev 04)
00:1b.0 Audio device: Intel Corporation 8 Series HD Audio Controller (rev 04)
00:1c.0 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 1 (rev e4)
00:1c.1 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 2 (rev e4)
00:1c.2 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 3 (rev e4)
00:1d.0 USB controller: Intel Corporation 8 Series USB EHCI #1 (rev 04)
00:1f.0 ISA bridge: Intel Corporation 8 Series LPC Controller (rev 04)
00:1f.2 SATA controller: Intel Corporation 8 Series SATA Controller 1 [AHCI mode] (rev 04)
00:1f.3 SMBus: Intel Corporation 8 Series SMBus Controller (rev 04)
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 10)
04:00.0 Network controller: Intel Corporation Wireless 7260 (rev bb)
在 Arch 中,该设备可以很好地提供 4G 网络。我可以连接到它提供的 WLAN。更多细节:
- 操作系统:Linux 5.17.8-arch1-1
- 电脑:ThinkPad S3-S440
- TD-TLE终端厂商:华为
我已经关闭了USB3.0模式。
我删除了一个 yum 包并从源代码安装了相同包的更高版本。但百胜没有看到。每当我尝试安装 yum 包时,它都会尝试安装旧的 yum 包,但看不到我安装的源包。
有没有办法让 yum 查看源包?请记住,我还不知道如何从源代码创建 rpm。
我对不同的程序使用不同的方法来控制它们的资源管理。当我将systemd-run用于gimp(GNU图像处理程序)时,当图片的内存要求高于限制(即我设置的300MB)时,程序崩溃并关闭。是否有任何systemd-run方法既可以安全地使用它而不会崩溃并将其内存限制在限制范围内?
我使用以下命令在其快捷方式(即其桌面文件)中使用 systemd-run 启动它:
systemd-run --scope -p MemoryLimit=300M gimp-2.8 %U
我正在尝试学习 cgroups-v2 并练习它。cgroups-v2 文档指出,输入 pid 是向 cgroups-v2 添加程序的唯一方法。有没有其他方法可以将程序的可执行文件添加到 cgroups-v2?
即而不是这样做:
echo "34578" > /sys/fs/cgroup/Example/tasks/cgroup.procs
我可以对可执行文件执行此操作吗,例如:
echo "/usr/bin/firefox/firefox > /sys/fs/cgroup/Example/tasks/cgroup.procs
我每次都必须知道程序的 pid 是什么来控制其资源吗?(我还发现systemd-run在systemd-run 解决方案中也可以完成类似的事情,但是,由于我尝试学习 cgroups-v2,所以它超出了主题)。
我目前正在做一个小项目;在名为 weatherdata.kml 的 kml 文件中,我想提取每个<Placemark>
元素的海平面压力。我正在尝试解析有关海平面压力的信息并将其放入一个名为report.csv
; 并每次在新行上打印海平面压力。
我认为这可以使用awk
,到目前为止我已经尝试过:
awk -F '[>,]' '/minSeaLevelPres/ {print $2}' report.csv
但是当我在 shell 中运行这个命令时,我得到了这个:
1002</minSeaLevelPres
1002</minSeaLevelPres
1002</minSeaLevelPres
1001</minSeaLevelPres
1001</minSeaLevelPres
1001</minSeaLevelPres
1001</minSeaLevelPres
1001</minSeaLevelPres
1001</minSeaLevelPres
1001</minSeaLevelPres
1001</minSeaLevelPres
1002</minSeaLevelPres
1002</minSeaLevelPres
1003</minSeaLevelPres
当我想得到这个时:
1002
1002
1002
1001
1001
1001
1001
1001
1001
1001
1001
1002
1002
1003
我不知道如何摆脱</minSeaLevelPres
. 有人能帮忙吗?
下面是一个地标元素的一部分的示例weatherdata.kml
<Placemark>
<styleUrl>#ex</styleUrl>
<lat>19.2</lat>
<lon>-24.1</lon>
<stormName>NINE</stormName>
<stormNum>10</stormNum>
<basin>AL</basin>
<stormType>LO</stormType>
<intensity>20</intensity>
<intensityMPH>23</intensityMPH>
<intensityKPH>37</intensityKPH>
<minSeaLevelPres>1002</minSeaLevelPres>
<atcfdtg>2020082350</atcfdtg>
<dtg>0000 UTC JAN 07</dtg>
</Placemark>
我想pkglist.txt
至少在 Manjaro 和 Ubuntu 中安装一个软件包列表,尽管如果有办法在所有发行版上安装它会更好。我怎样才能做到这一点?
我想到了类似的东西:
# If on Manjaro:
yay -S --no-confirm --needed - < pkglist.txt
# Else if on Ubuntu:
xargs sudo apt install < pkglist.txt
问题是我得到了一堆Unable to locate package
错误。我可以从文件中一一安装软件包并忽略错误。
我尝试使用名称解析并获取网站的 IP 地址。我使用nslookup命令并使用其输出的第 6 行。因为我注意到 nslookup 的输出在第 6 行包含 IP 地址(在 IPv4 中)。我的命令是:
website=<somewebsiteURL>
IP=$(nslookup "$website" | head -n 6 | tail -n 1 | cut -d" " -f2)
我也尝试了 sed 命令来达到相同的目标并使用:
website=<somewebsiteURL>
IP=$(nslookup "$website" | sed -n 6p | cut -d" " -f2)
结果是一样的,结果不可靠,有时有效,有时无效。
它可以正常工作,但并非总是如此。有时它读取第 7 行,而不是第 6 行并失败。
实际上我用另一种方法解决了我的问题:
website=<somewebsiteURL>
newIP=$(nslookup "$website" | grep "Address: " | head -n 1 | cut -d" " -f2)
每次都给出正确的线路和 IP 地址(尽管它可以提供多个 IP > nslookup 可以返回多个 IP)
为什么前两个代码失败?
我想要
- 启动ping命令
- 只得到第一行
- 在第一行输出后终止 ping 命令并将第一行放入变量
我做了:
firstline=$(ping -c 1 <site> > tmpfile | head -1)
但它完成了 ping 命令,然后写入 tmp 文件,然后取第一行。如何在输出第一行后终止 ping 命令的输出流?