Bashスクリプトは、ソースフォルダの外にあるときに「コマンドが見つかりません」を返します。

Bashスクリプトは、ソースフォルダの外にあるときに「コマンドが見つかりません」を返します。

私のディレクトリには/home/lucas/bin次のスクリプトがありますterm_multiscreen

[lucas@lucas-ThinkPad-W520]~$ sudo cat bin/term_multiscreen                              
#!/bin/bash
# Initializes Nvidia Optimus for multi-screen functionality.

xorg_process=$(ps aux | grep 'Xorg' | grep -v grep | awk '{print $2}')
sudo kill -15 $xorg_process
sudo rmmod nvidia
sudo tee /proc/acpi/bbswitch <<<OFF
# xrandr --output VIRTUAL1 --off
[lucas@lucas-ThinkPad-W520]~$ 

私がするときcd ~/bin、それはうまく動作しますsudo term_multiscreen。私がそのディレクトリの外にいるときに返されますcommand not found/home/lucas/bin私のものもそこにあります$PATH。私は何が間違っていましたか?

しかし、私の権限は次のとおりです。

[lucas@lucas-ThinkPad-W520]~$ ls -la bin/
total 44
drwxr-xr-x  2 lucas lucas 4096 May  6 15:43 .
drwxr-xr-x 71 lucas lucas 4096 May  6 15:43 ..
-rwx--x--x  1 root  root   137 Mar  2 03:26 init_multiscreen
-rw-r--r--  1 lucas lucas    0 Mar  2 03:24 init_optimus~
-rwx--x--x  1 root  root   260 Mar  2 05:54 term_multiscreen
[lucas@lucas-ThinkPad-W520]~$ 

ところで、私はUbuntu 13.10を使用しています。

ベストアンサー1

フルパスを使用してスクリプトを呼び出すことをお勧めします:sudo /home/lucas/bin/term_multiscreenまたはsudo ~/bin/term_multiscreen。これはsudosに関連するセキュリティリスクをもたらしませんsecure_path

もちろん、入力が長すぎるため(管理者は怠惰です)、別名に入力してください~/.bashrc

alias tmulti="sudo $HOME/bin/term_multiscreen"

その後、~.bashrcテストを再ロードします。

. ~/.bashrc
tmulti

常に呼び出しスクリプトを使用している場合は、スクリプトから呼び出しをsudo削除することもできます。sudo

おすすめ記事