banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix Thắc mắc nhỏ với shell của Ubuntu  XML
  [Question]   Thắc mắc nhỏ với shell của Ubuntu 10/11/2008 13:17:18 (+0700) | #1 | 158299
[Avatar]
learn2hack
Elite Member

[Minus]    0    [Plus]
Joined: 29/06/2006 16:32:37
Messages: 825
Offline
[Profile] [PM] [WWW]
Chào mọi người. Mình thử chạy dòng lệnh sau để stop Apache trên máy Ubuntu của mình:

Code:
tuanh@TUANH:~$ command="sudo /etc/init.d/apache2 stop"; echo `$command`


Lệnh này cho kết quả thì đúng, Apache được stop, nhưng nó lại liệt kê thêm cả các file trong thư mục hiên thời (~) của mình.

Code:
Desktop Documents Examples Music Pictures Public skim_oo.sh Templates unikey_wrapper Videos xvnkb_wrapper Stopping web server apache2                    [ OK ]


Mình ko hiểu nguyên nhân gì khiến nó liệt kê các file đó. Khi thử thay thế biến command bằng lệnh khác, VD như ls, echo thì không có vấn đề gì. Rất mong mọi người giúp mình giải thích hiện tượng trên. Cám ơn mọi người rất nhiều.
Blog: http://hontap.blogspot.com
Tải phần mềm miễn phí: http://www.taiphanmem.org
[Up] [Print Copy]
  [Question]   Re: Thắc mắc nhỏ với shell của Ubuntu 12/11/2008 03:17:41 (+0700) | #2 | 158482
mR.Bi
Member

[Minus]    0    [Plus]
Joined: 22/03/2006 13:17:49
Messages: 812
Offline
[Profile] [PM] [WWW]
Em nghĩ ý của anh là khi thực hiện lệnh xong thì in ra kết quả và in ra lệnh mà anh dùng, nếu đúng như thế thì em nghĩ cách anh làm hơi ...sai tí smilie

Code:
command="sudo /etc/init.d/apache2 stop"; $command; echo $command


Lúc này sau khi stop apache thì nó sẽ in ra kết quả đại loại thế này:

Code:
Stopping web server apache2                    [ OK ]
sudo /etc/init.d/apache2 stop


All of my life I have lived by a code and the code is simple: "honour your parent, love your woman and defend your children"
[Up] [Print Copy]
  [Question]   Re: Thắc mắc nhỏ với shell của Ubuntu 13/11/2008 10:11:12 (+0700) | #3 | 158688
[Avatar]
learn2hack
Elite Member

[Minus]    0    [Plus]
Joined: 29/06/2006 16:32:37
Messages: 825
Offline
[Profile] [PM] [WWW]
Cám ơn Bi nhé. Ý anh là chạy lệnh được gán vào biến $command, anh nghĩ là phải dùng dấu nháy ngược nhưng hóa ra ko cần smilie.
Blog: http://hontap.blogspot.com
Tải phần mềm miễn phí: http://www.taiphanmem.org
[Up] [Print Copy]
  [Question]   Re: Thắc mắc nhỏ với shell của Ubuntu 13/11/2008 11:50:08 (+0700) | #4 | 158697
mR.Bi
Member

[Minus]    0    [Plus]
Joined: 22/03/2006 13:17:49
Messages: 812
Offline
[Profile] [PM] [WWW]
Em cũng không hiểu vì sao mà mà lệnh của anh nó liệt kê tất cả các file ở thư mục hiện hành, em làm thử, kết quả y như anh, vui ghê smilie
All of my life I have lived by a code and the code is simple: "honour your parent, love your woman and defend your children"
[Up] [Print Copy]
  [Question]   Re: Thắc mắc nhỏ với shell của Ubuntu 13/11/2008 12:13:16 (+0700) | #5 | 158699
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
- Tớ vừa test trên Fedora + Red Hat, không xảy ra trường hợp như 2 bạn nói
- Thử đọc man command
- Thử nhét lệnh trên vào một file shell script, rồi chạy nó ở 'debug' mode xem sao.
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Re: Thắc mắc nhỏ với shell của Ubuntu 13/11/2008 12:57:19 (+0700) | #6 | 158701
mR.Bi
Member

[Minus]    0    [Plus]
Joined: 22/03/2006 13:17:49
Messages: 812
Offline
[Profile] [PM] [WWW]
Đây là dòng lúc chạy cái shell script bình thường

Code:
root@whatvn:/usr/local/src# ./test.sh
modsecurity-apache_2.5.7.tar.gz test.sh Stopping web server apache2             httpd (no pid file) not running                                          [ OK ]


Chạy ở Debug mode

Code:
root@whatvn:/usr/local/src# bash -x test.sh
+ command='sudo /etc/init.d/apache2 stop'
++ sudo /etc/init.d/apache2 stop
+ echo modsecurity-apache_2.5.7.tar.gz test.sh Stopping web server apache2 '   ' httpd '(no' pid 'file)' not running '                                   [' OK ']'
modsecurity-apache_2.5.7.tar.gz test.sh Stopping web server apache2             httpd (no pid file) not running                                          [ OK ]


Trong /usr/local/src của em có test.sh và modsecurity-apache_2.5.7.tar.gz.
All of my life I have lived by a code and the code is simple: "honour your parent, love your woman and defend your children"
[Up] [Print Copy]
  [Question]   Re: Thắc mắc nhỏ với shell của Ubuntu 13/11/2008 14:11:20 (+0700) | #7 | 158705
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
Các bạn post nội dung của init script apache2 lên đây.




Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Re: Thắc mắc nhỏ với shell của Ubuntu 13/11/2008 15:03:52 (+0700) | #8 | 158718
mR.Bi
Member

[Minus]    0    [Plus]
Joined: 22/03/2006 13:17:49
Messages: 812
Offline
[Profile] [PM] [WWW]
Code:
ibrm@whatvn:/etc/init.d$ cat apache2
#!/bin/sh -e
### BEGIN INIT INFO
# Provides:          apache2
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/stop apache2 web server
### END INIT INFO
#
# apache2		This init.d script is used to start apache2.
#			It basically just calls apache2ctl.

ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin"

#[ `ls -1 /etc/apache2/sites-enabled/ | wc -l | sed -e 's/ *//;'` -eq 0 ] && \
#echo "You haven't enabled any sites yet, so I'm not starting apache2." && \
#echo "To add and enable a host, use addhost and enhost." && exit 0

#edit /etc/default/apache2 to change this.
HTCACHECLEAN_RUN=auto
HTCACHECLEAN_MODE=daemon
HTCACHECLEAN_SIZE=300M
HTCACHECLEAN_DAEMON_INTERVAL=120
HTCACHECLEAN_PATH=/var/cache/apache2/mod_disk_cache
HTCACHECLEAN_OPTIONS=""

set -e
if [ -x /usr/sbin/apache2 ] ; then
	HAVE_APACHE2=1
else
	echo "No apache MPM package installed"
	exit 0
fi

. /lib/lsb/init-functions

test -f /etc/default/rcS && . /etc/default/rcS
test -f /etc/default/apache2 && . /etc/default/apache2

APACHE2CTL="$ENV /usr/sbin/apache2ctl"
HTCACHECLEAN="$ENV /usr/sbin/htcacheclean"

check_htcacheclean() {
	[ "$HTCACHECLEAN_MODE" = "daemon" ] || return 1

	[ "$HTCACHECLEAN_RUN"  = "yes"    ] && return 0

	[ "$HTCACHECLEAN_RUN"  = "auto" \
	  -a -e /etc/apache2/mods-enabled/disk_cache.load ] && return 0
	
	return 1
}

start_htcacheclean() {
	$HTCACHECLEAN $HTCACHECLEAN_OPTIONS -d$HTCACHECLEAN_DAEMON_INTERVAL \
			-i -p$HTCACHECLEAN_PATH -l$HTCACHECLEAN_SIZE
				
}

stop_htcacheclean() {
	killall htcacheclean 2> /dev/null || echo ...not running
}

pidof_apache() {
    # if pidof is null for some reasons the script exits automagically
    # classified as good/unknown feature
    PIDS=`pidof apache2` || true

    PFILE=`. /etc/apache2/envvars ; echo $APACHE_PID_FILE`
    if [ -z "$PFILE" ] ; then
    	echo ERROR: APACHE_PID_FILE needs to be defined in /etc/apache2/envvars >&2
	exit 2
    fi

    [ -e $PFILE ] && PIDS2=`cat $PFILE`
    
    # if there is a pid we need to verify that belongs to apache2
    # for real
    for i in $PIDS; do
    	if [ "$i" = "$PIDS2" ]; then
            # in this case the pid stored in the
            # pidfile matches one of the pidof apache
            # so a simple kill will make it
            echo $i
            return 0
        fi
    done
    return 1
}

apache_stop() {
	if `$APACHE2CTL configtest > /dev/null 2>&1`; then
		# if the config is ok than we just stop normaly
                $APACHE2CTL graceful-stop
	else
		# if we are here something is broken and we need to try
		# to exit as nice and clean as possible
		PID=$(pidof_apache)

		if [ "${PID}" ]; then
			# in this case it is everything nice and dandy
			# and we kill apache2
			log_warning_msg "We failed to correctly shutdown apache, so we're now killing all running apache processes. This is almost certainly suboptimal, so please make sure your system is working as you'd expect now!"
                        kill $PID
		elif [ "$(pidof apache2)" ]; then
			if [ "$VERBOSE" != no ]; then
                                echo " ... failed!"
			        echo "You may still have some apache2 processes running.  There are"
 			        echo "processes named 'apache2' which do not match your pid file,"
			        echo "and in the name of safety, we've left them alone.  Please review"
			        echo "the situation by hand."
                        fi
                        return 1
		fi
	fi
}

# Stupid hack to keep lintian happy. (Warrk! Stupidhack!).
case $1 in
	start)
		log_daemon_msg "Starting web server" "apache2"
		if $APACHE2CTL start; then
			if check_htcacheclean ; then
				log_progress_msg htcacheclean
				start_htcacheclean || log_end_msg 1
			fi
                        log_end_msg 0
                else
                        log_end_msg 1
                fi
	;;
	stop)
		if check_htcacheclean ; then
			log_daemon_msg "Stopping web server" "htcacheclean"
			stop_htcacheclean
			log_progress_msg "apache2"
		else
			log_daemon_msg "Stopping web server" "apache2"
		fi
		if apache_stop; then
                        log_end_msg 0
                else
                        log_end_msg 1
                fi
	;;
	reload | force-reload)
		if ! $APACHE2CTL configtest > /dev/null 2>&1; then
                    $APACHE2CTL configtest || true
                    log_end_msg 1
                    exit 1
                fi
                log_daemon_msg "Reloading web server config" "apache2"
		if pidof_apache > /dev/null ; then
                    if $APACHE2CTL graceful $2 ; then
                        log_end_msg 0
                    else
                        log_end_msg 1
                    fi
                fi
	;;
	restart)
		if check_htcacheclean ; then
			log_daemon_msg "Restarting web server" "htcacheclean"
			stop_htcacheclean
			log_progress_msg apache2
		else
			log_daemon_msg "Restarting web server" "apache2"
		fi
		if ! apache_stop; then
                        log_end_msg 1 || true
                fi
		sleep 10
		if $APACHE2CTL start; then
			if check_htcacheclean ; then
				start_htcacheclean || log_end_msg 1
			fi
                        log_end_msg 0
                else
                        log_end_msg 1
                fi
	;;
	start-htcacheclean)
		log_daemon_msg "Starting htcacheclean"
		start_htcacheclean || log_end_msg 1
		log_end_msg 0
	;;
	stop-htcacheclean)
		log_daemon_msg "Stopping htcacheclean"
			stop_htcacheclean
			log_end_msg 0
	;;
	*)
		log_success_msg "Usage: /etc/init.d/apache2 {start|stop|restart|reload|force-reload|start-htcacheclean|stop-htcacheclean}"
		exit 1
	;;
esac


Em cài con Apache này lên để xem cái command trên nó ra cái gì thôi đấy smilie
All of my life I have lived by a code and the code is simple: "honour your parent, love your woman and defend your children"
[Up] [Print Copy]
  [Question]   Re: Thắc mắc nhỏ với shell của Ubuntu 14/11/2008 14:26:06 (+0700) | #9 | 158851
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
Em nên debug riêng đoạn stop apache thôi.

Vấn đề chúng ta cần hiểu rõ là:
Trong bash shell:

Dấu $ - lấy giá trị của biến
Dấu nháy ngược (backticks) ` `- thực hiện lệnh nằm trong đó và đưa thông tin trả về ra màn hình.

Như vậy, nếu giả sử tôi gõ:
Code:
$ `sudo /etc/init.d/smb restart`

thì sẽ được báo cáo ngay:
bash: Shutting: command not found 


Thử tiếp với 'echo':
Code:
$ echo `sudo /etc/init.d/smb restart`
 Starting SMB services: es:                                [ OK ]

Không hiểu nó 'nhả' cái 'es' ở đâu ra?

Bà con vào tham gia cho vui.
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Re: Thắc mắc nhỏ với shell của Ubuntu 14/11/2008 15:19:14 (+0700) | #10 | 158857
mR.Bi
Member

[Minus]    0    [Plus]
Joined: 22/03/2006 13:17:49
Messages: 812
Offline
[Profile] [PM] [WWW]
Lúc anh chạy lệnh đầu tiên anh đang đứng ở thư mục "shutting" có phải không?

Lúc anh chạy lệnh thứ 2 trong thư mục "shutting" không có file nào, chứ nếu có là nó phun ra như em cho xem:

Code:
ibrm@whatvn:/usr/local/src$  echo `sudo /etc/init.d/mysql start`
modsecurity-apache_2.5.7 modsecurity-apache_2.5.7.tar.gz test.sh Starting MySQL database server mysqld


cái ` `$ thì em hiểu, cũng giống như lập trình mình gán biến thôi

nếu thay cái dòng lệnh của anh Learn2hack

Code:
tuanh@TUANH:~$ command="sudo /etc/init.d/apache2 stop"; echo `$command`


thành

Code:
tuanh@TUANH:~$ whatever="sudo /etc/init.d/apache2 stop"; echo `$whatever`


thì kết quả cũng như nhau, vì thế lúc anh bảo đọc man command em chẳng hiểu, nên chưa có đọc smilie

Nếu echo $value thì chỉ in ra giá trị gán cho $value chứ không thực hiện lệnh, vì thế ở trên em có thêm $command; rồi mới echo $command để in ra lệnh đã gán.



All of my life I have lived by a code and the code is simple: "honour your parent, love your woman and defend your children"
[Up] [Print Copy]
  [Question]   Re: Thắc mắc nhỏ với shell của Ubuntu 14/11/2008 23:31:55 (+0700) | #11 | 158869
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

mR.Bi wrote:
Lúc anh chạy lệnh đầu tiên anh đang đứng ở thư mục "shutting" có phải không?

Lúc anh chạy lệnh thứ 2 trong thư mục "shutting" không có file nào, chứ nếu có là nó phun ra như em cho xem:
 

Không em.
Code:
$ `sudo /etc/init.d/smb restart`

Cái dấu backticks nó 'quái' ở chỗ đó. Đoạn lệnh nằm trong backticks nó trả cái gì ra màn hình:
Code:
Shutting down SMB services:                                [  OK  ]
Starting SMB services:                                     [  OK  ]

Khi cho nó vào trong backticks thì nó mới báo:
bash: Shutting: command not found 

mR.Bi wrote:

Code:
ibrm@whatvn:/usr/local/src$  echo `sudo /etc/init.d/mysql start`
modsecurity-apache_2.5.7 modsecurity-apache_2.5.7.tar.gz test.sh Starting MySQL database server mysqld


cái ` `$ thì em hiểu, cũng giống như lập trình mình gán biến thôi

nếu thay cái dòng lệnh của anh Learn2hack

Code:
tuanh@TUANH:~$ command="sudo /etc/init.d/apache2 stop"; echo `$command`


thành

Code:
tuanh@TUANH:~$ whatever="sudo /etc/init.d/apache2 stop"; echo `$whatever`


thì kết quả cũng như nhau,
 

Anh đã thử và cũng thấy thế. Sao learn2hack bảo 'ls' và 'echo' nó không liệt kê ra?

mR.Bi wrote:

vì thế lúc anh bảo đọc man command em chẳng hiểu, nên chưa có đọc smilie
 

Anh nhầm.
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Re: Thắc mắc nhỏ với shell của Ubuntu 15/11/2008 10:19:09 (+0700) | #12 | 158943
[Avatar]
learn2hack
Elite Member

[Minus]    0    [Plus]
Joined: 29/06/2006 16:32:37
Messages: 825
Offline
[Profile] [PM] [WWW]

quanta wrote:

mR.Bi wrote:

Code:
ibrm@whatvn:/usr/local/src$  echo `sudo /etc/init.d/mysql start`
modsecurity-apache_2.5.7 modsecurity-apache_2.5.7.tar.gz test.sh Starting MySQL database server mysqld


cái ` `$ thì em hiểu, cũng giống như lập trình mình gán biến thôi

nếu thay cái dòng lệnh của anh Learn2hack

Code:
tuanh@TUANH:~$ command="sudo /etc/init.d/apache2 stop"; echo `$command`


thành

Code:
tuanh@TUANH:~$ whatever="sudo /etc/init.d/apache2 stop"; echo `$whatever`


thì kết quả cũng như nhau,
 

Anh đã thử và cũng thấy thế. Sao learn2hack bảo 'ls' và 'echo' nó không liệt kê ra?
 

Tớ thử thay lệnh apache2 bằng lệnh ls hoặc echo thì thu được thế này:
Code:
tuanh@TUANH:~$ abc="echo Day la cai gi vay?"; echo `$abc`
Day la cai gi vay?

tuanh@TUANH:~$ abc="ls -l"; echo `$abc`
total 48 drwxr-xr-x 2 tuanh tuanh 4096 2008-11-13 18:49 Desktop drwxr-xr-x 2 tuanh tuanh 4096 2008-11-11 11:07 Documents -rwxr--r-- 1 tuanh tuanh 1455 2008-11-13 00:17 lamp.bash -rw-r--r-- 1 tuanh tuanh 1379 2008-11-12 16:11 lamp.bash~ drwxr-xr-x 2 tuanh tuanh 4096 2008-11-11 12:13 Music -rw-r--r-- 1 tuanh tuanh 0 2008-11-12 22:03 nautilus-debug-log.txt drwxr-xr-x 2 tuanh tuanh 4096 2008-11-13 18:31 Pictures drwxr-xr-x 2 tuanh tuanh 4096 2008-10-28 00:19 Public -rwxr-xr-x 1 tuanh tuanh 63 2008-11-07 19:34 skim_oo.sh drwxr-xr-x 2 tuanh tuanh 4096 2008-10-28 00:19 Templates -rwxr-xr-x 1 tuanh tuanh 118 2008-11-07 19:34 unikey_wrapper drwxr-xr-x 2 tuanh tuanh 4096 2008-10-28 00:19 Videos -rwxr-xr-x 1 tuanh tuanh 163 2008-11-07 19:34 xvnkb_wrapper

Nếu mà biến chứa lệnh echo thì hiện ko vấn đề gì, biến chứa lệnh ls thì liệt kê đúng thật, nhưng lộn xộn ko có hàng lối gì cả, còn như trường hợp đầu tiên (chứa lệnh stop apache) thì nó phun ra các file trong thư mục hiện thời. Tớ vẫn không hiểu cái backtick này có vai trò gì trong này nữa smilie

quanta wrote:

Như vậy, nếu giả sử tôi gõ:

$ `sudo /etc/init.d/smb restart`

thì sẽ được báo cáo ngay:

bash: Shutting: command not found

Thử tiếp với 'echo':
$ echo `sudo /etc/init.d/smb restart`
Starting SMB services: es: [ OK ]

Không hiểu nó 'nhả' cái 'es' ở đâu ra?
 

Tớ cũng thử với `sudo /etc/init.d/apache2 stop` thì nó báo bash: Desktop: command not found, mặc dù đang đứng ở thư mục Home, không hiểu nó tìm command theo cách nào mà ra được Desktop. Còn nếu thêm echo vào đầu thì đúng là nó phun các file trong thư mục hiện thời, ko lòi thêm 'es' nào giống của quanta cả.

Khó hiểu thật!
Blog: http://hontap.blogspot.com
Tải phần mềm miễn phí: http://www.taiphanmem.org
[Up] [Print Copy]
  [Question]   Re: Thắc mắc nhỏ với shell của Ubuntu 15/11/2008 10:45:50 (+0700) | #13 | 158945
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

learn2hack wrote:

Tớ thử thay lệnh apache2 bằng lệnh ls hoặc echo thì thu được thế này:
Code:
tuanh@TUANH:~$ abc="echo Day la cai gi vay?"; echo `$abc`
Day la cai gi vay?

tuanh@TUANH:~$ abc="ls -l"; echo `$abc`
total 48 drwxr-xr-x 2 tuanh tuanh 4096 2008-11-13 18:49 Desktop drwxr-xr-x 2 tuanh tuanh 4096 2008-11-11 11:07 Documents -rwxr--r-- 1 tuanh tuanh 1455 2008-11-13 00:17 lamp.bash -rw-r--r-- 1 tuanh tuanh 1379 2008-11-12 16:11 lamp.bash~ drwxr-xr-x 2 tuanh tuanh 4096 2008-11-11 12:13 Music -rw-r--r-- 1 tuanh tuanh 0 2008-11-12 22:03 nautilus-debug-log.txt drwxr-xr-x 2 tuanh tuanh 4096 2008-11-13 18:31 Pictures drwxr-xr-x 2 tuanh tuanh 4096 2008-10-28 00:19 Public -rwxr-xr-x 1 tuanh tuanh 63 2008-11-07 19:34 skim_oo.sh drwxr-xr-x 2 tuanh tuanh 4096 2008-10-28 00:19 Templates -rwxr-xr-x 1 tuanh tuanh 118 2008-11-07 19:34 unikey_wrapper drwxr-xr-x 2 tuanh tuanh 4096 2008-10-28 00:19 Videos -rwxr-xr-x 1 tuanh tuanh 163 2008-11-07 19:34 xvnkb_wrapper

Nếu mà biến chứa lệnh echo thì hiện ko vấn đề gì, biến chứa lệnh ls thì liệt kê đúng thật, nhưng lộn xộn ko có hàng lối gì cả, còn như trường hợp đầu tiên (chứa lệnh stop apache) thì nó phun ra các file trong thư mục hiện thời. Tớ vẫn không hiểu cái backtick này có vai trò gì trong này nữa smilie
 

Hai lệnh này hoàn toàn không có gì khó hiểu cả.

+ Lệnh 1:
- $abc có giá trị là "echo Day la cai nay!"
- `$abc` sẽ thực hiện lệnh trong đó, như vậy nó trả về màn hình "Day la cai nay!"
- echo `$abc` vẫn chỉ trả về "Day la cai nay!" mà thôi.

+ Lệnh 2 nó không có 'hàng lối' bởi vì dòng đầu tiên trong man page của 'echo' là:
echo - display a line of text 

learn2hack wrote:

quanta wrote:

Như vậy, nếu giả sử tôi gõ:

$ `sudo /etc/init.d/smb restart`

thì sẽ được báo cáo ngay:

bash: Shutting: command not found

Thử tiếp với 'echo':
$ echo `sudo /etc/init.d/smb restart`
Starting SMB services: es: [ OK ]

Không hiểu nó 'nhả' cái 'es' ở đâu ra?
 

Tớ cũng thử với `sudo /etc/init.d/apache2 stop` thì nó báo bash: Desktop: command not found, mặc dù đang đứng ở thư mục Home, không hiểu nó tìm command theo cách nào mà ra được Desktop. Còn nếu thêm echo vào đầu thì đúng là nó phun các file trong thư mục hiện thời, ko lòi thêm 'es' nào giống của quanta cả.

Khó hiểu thật!
 

- Bạn chạy sudo /etc/init.d/apache2 stop thì nó ra cái gì?
- init script của bạn và của tôi tất nhiên là khác nhau
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Re: Thắc mắc nhỏ với shell của Ubuntu 16/11/2008 03:22:39 (+0700) | #14 | 159038
[Avatar]
giobuon
Member

[Minus]    0    [Plus]
Joined: 10/09/2006 06:25:46
Messages: 72
Offline
[Profile] [PM]
Có lẽ mọi người cần tìm hiểu thêm về hai cái dấu `` này thì mới giải quyết được vấn đề.
Trong bash `` là đại diện cho subshell tương tự như $(). Điều này có nghĩa là: Khi ta dùng lệnh, vd: `command` chẳng hạn thì nó sẽ tạo ra một shell con có PPID là shell chúng ta đang dùng, chạy command trên shell đó, output trả lại sẽ thay thế đúng vị trí của cụm ``.
Lấy ví dụ luôn như bạn ở trên:
Code:
abc="echo Day la cai gi vay?"; echo `$abc`


Lệnh echo `$abc` sẽ tương đương với:
Tạo subshell, chạy trên subshell đấy dòng $abc (tức là lệnh echo Day la cai gi vay?). Kết quả trả về sẽ là:
Day la cai gi vay?
Kết quả này sẽ được trả lại shell cha theo đúng thứ tự: tức là lúc này shell cha sẽ chạy lệnh
Code:
echo Day la cai gi vay?


Có một lưu ý nhỏ:
Subshell sẽ trả về cho shell cha chỉ STDOUT. Nếu bạn chạy trong subshell mà thấy nó vẫn trả về thông báo thì những thông báo đó là STDERR.

Tớ chỉ có tí hiểu biết vậy thôi, ko biết có gì sai không smilie
[Up] [Print Copy]
  [Question]   Re: Thắc mắc nhỏ với shell của Ubuntu 16/11/2008 07:05:35 (+0700) | #15 | 159059
[Avatar]
learn2hack
Elite Member

[Minus]    0    [Plus]
Joined: 29/06/2006 16:32:37
Messages: 825
Offline
[Profile] [PM] [WWW]
@quanta: 2 lệnh kia tớ ko có ý kiến gì lắm, tớ lấy ví dụ là để nhấn mạnh là chúng hoạt động ok, tớ chỉ thắc mắc thay lệnh stop apache vào chỗ đó thì kết quả khác thôi.
Đây là output khi chạy lệnh stop apache2:
Code:
tuanh@TUANH:~$ sudo /etc/init.d/apache2 stop
[sudo] password for tuanh:
 * Stopping web server apache2                                           [ OK ]

Init script của tớ thì cũng giống của Mr.Bi vì cùng trên Ubuntu cả. Có lẽ là nguyên nhân tại init script này, vì quanta chạy trên máy của mình thì ko có vấn đề gì. Nhưng ko rõ là ở chỗ nào trong script smilie.

@giobuon: Tớ nghĩ là bạn đã nói đúng. Như thế thì kết hợp với giải thích của quanta về sự lộn xộn khi echo `ls ...` sẽ trọn vẹn. Vấn đề có lẽ như nói ở trên, là ở init script này.
Blog: http://hontap.blogspot.com
Tải phần mềm miễn phí: http://www.taiphanmem.org
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|